网页爬虫之cookie自动获取及过期自动更新的实现方法


Posted in Javascript onMarch 06, 2018

本文实现cookie的自动获取,及cookie过期自动更新。

社交网站中的很多信息需要登录才能获取到,以微博为例,不登录账号,只能看到大V的前十条微博。保持登录状态,必须要用到Cookie。以登录www.weibo.cn 为例:

在chrome中输入:http://login.weibo.cn/login/

网页爬虫之cookie自动获取及过期自动更新的实现方法

分析控制台的Headers的请求返回,会看到weibo.cn有几组返回的cookie。

实现步骤:

1,采用selenium自动登录获取cookie,保存到文件;

2,读取cookie,比较cookie的有效期,若过期则再次执行步骤1;

3,在请求其他网页时,填入cookie,实现登录状态的保持。

1,在线获取cookie

采用selenium + PhantomJS 模拟浏览器登录,获取cookie;

cookies一般会有多个,逐个将cookie存入以.weibo后缀的文件。

def get_cookie_from_network():
 from selenium import webdriver
 url_login = 'http://login.weibo.cn/login/' 
 driver = webdriver.PhantomJS()
 driver.get(url_login)
 driver.find_element_by_xpath('//input[@type="text"]').send_keys('your_weibo_accout') # 改成你的微博账号
 driver.find_element_by_xpath('//input[@type="password"]').send_keys('your_weibo_password') # 改成你的微博密码
 driver.find_element_by_xpath('//input[@type="submit"]').click() # 点击登录
 # 获得 cookie信息
 cookie_list = driver.get_cookies()
 print cookie_list
 cookie_dict = {}
 for cookie in cookie_list:
  #写入文件
  f = open(cookie['name']+'.weibo','w')
  pickle.dump(cookie, f)
  f.close()
  if cookie.has_key('name') and cookie.has_key('value'):
   cookie_dict[cookie['name']] = cookie['value']
 return cookie_dict

2,从文件中获取cookie

从当前目录中遍历以.weibo结尾的文件,即cookie文件。采用pickle解包成dict,比较expiry值与当前时间,若过期则返回为空;

def get_cookie_from_cache():
 cookie_dict = {}
 for parent, dirnames, filenames in os.walk('./'):
  for filename in filenames:
   if filename.endswith('.weibo'):
    print filename
    with open(self.dir_temp + filename, 'r') as f:
     d = pickle.load(f)
     if d.has_key('name') and d.has_key('value') and d.has_key('expiry'):
      expiry_date = int(d['expiry'])
      if expiry_date > (int)(time.time()):
       cookie_dict[d['name']] = d['value']
      else:
       return {}
 return cookie_dict

3,若缓存cookie过期,则再次从网络获取cookie

def get_cookie():
 cookie_dict = get_cookie_from_cache()
 if not cookie_dict:
  cookie_dict = get_cookie_from_network()
 return cookie_dict

4,带cookie请求微博其他主页

def get_weibo_list(self, user_id):
 import requests
 from bs4 import BeautifulSoup as bs
 cookdic = get_cookie()
 url = 'http://weibo.cn/stocknews88' 
 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36'}
 timeout = 5
 r = requests.get(url, headers=headers, cookies=cookdic,timeout=timeout)
 soup = bs(r.text, 'lxml')
 ...
 # 用BeautifulSoup 解析网页
 ...

总结

以上所述是小编给大家介绍的网页爬虫之cookie自动获取及过期自动更新的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
用于节点操作的API,颠覆原生操作HTML DOM节点的API
Dec 11 Javascript
jQuery代码优化 遍历篇
Nov 01 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
Jul 09 Javascript
防止按钮在短时间内被多次点击的方法
Mar 10 Javascript
初识Node.js
Sep 03 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
Mar 01 Javascript
JS实现队列与堆栈的方法
Apr 21 Javascript
js验证框架之RealyEasy验证详解
Jun 08 Javascript
bootstrap使用validate实现简单校验功能
Dec 02 Javascript
NestJs 静态目录配置详解
Mar 12 Javascript
详解如何在JS代码中消灭for循环
Dec 11 Javascript
基于JQuery和DWR实现异步数据传递
Oct 16 jQuery
React BootStrap用户体验框架快速上手
Mar 06 #Javascript
基于vue打包后字体和图片资源失效问题的解决方法
Mar 06 #Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
Mar 06 #Javascript
解决vue+webpack打包路径的问题
Mar 06 #Javascript
解决Vue打包之后文件路径出错的问题
Mar 06 #Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
Mar 06 #Javascript
在vue中,v-for的索引index在html中的使用方法
Mar 06 #Javascript
You might like
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
2011/11/10 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
2014/06/05 PHP
PHP中exec函数和shell_exec函数的区别
2014/08/20 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
javascript去除字符串左右两端的空格
2015/02/05 Javascript
jquery实现九宫格大转盘抽奖
2015/11/13 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
2016/12/17 Javascript
使用nodejs下载风景壁纸
2017/02/05 NodeJs
javascript html5轻松实现拖动功能
2017/03/01 Javascript
微信小程序实战之轮播图(3)
2017/04/17 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
2018/12/22 Javascript
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
python实现数值积分的Simpson方法实例分析
2015/06/05 Python
Python编程之event对象的用法实例分析
2017/03/23 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
美国购车网站:TrueCar
2016/10/19 全球购物
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
学校安全工作制度
2014/01/19 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
校本课程教学计划
2015/01/19 职场文书
昆虫记读书笔记
2015/06/26 职场文书
决心书格式及范文
2019/06/24 职场文书
Java数组与堆栈相关知识总结
2021/06/29 Java/Android
python lambda 表达式形式分析
2022/04/03 Python
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers