网页爬虫之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 相关文章推荐
一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子
May 21 Javascript
javascript解析json数据的3种方式
May 08 Javascript
通过$(this)使用jQuery包装后的方法或属性
May 18 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
Nov 26 Javascript
jQuery中on方法使用注意事项详解
Feb 15 Javascript
vue2.0结合Element实现select动态控制input禁用实例
May 12 Javascript
详解使用mpvue开发github小程序总结
Jul 25 Javascript
JQuery扩展对象方法操作示例
Aug 21 jQuery
Vue传参一箩筐(页面、组件)
Apr 04 Javascript
微信小程序实现图片选择并预览功能
Jul 25 Javascript
vue实现节点增删改功能
Sep 26 Javascript
js实现纯前端压缩图片
Nov 16 Javascript
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
Yii核心组件AssetManager原理分析
2014/12/02 PHP
php类的扩展和继承用法实例
2015/06/20 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
js表数据排序 sort table data
2009/02/18 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/03 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
js模仿java的Map集合详解
2016/01/06 Javascript
JavaScript关于提高网站性能的几点建议(一)
2016/07/24 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
js实现简单的计算器功能
2017/01/16 Javascript
JS中使用media实现响应式布局
2017/08/04 Javascript
Vue官网todoMVC示例代码
2018/01/29 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
2018/07/27 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
2019/09/21 jQuery
JavaScript实时更新当前的时间的示例代码
2020/07/15 Javascript
Vue+Openlayers自定义轨迹动画
2020/09/24 Javascript
pycharm 使用心得(五)断点调试
2014/06/06 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
python opencv 直方图反向投影的方法
2018/02/24 Python
深入理解Django的中间件middleware
2018/03/14 Python
ubuntu17.4下为python和python3装上pip的方法
2018/06/12 Python
Windows下python3.6.4安装教程
2018/07/31 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
python实现AES加密与解密
2019/03/28 Python
用Python实现BP神经网络(附代码)
2019/07/10 Python
详解Django 时间与时区设置问题
2019/07/23 Python
Python 二叉树的层序建立与三种遍历实现详解
2019/07/29 Python
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
介绍一下Java中的static关键字
2012/05/12 面试题
信息技术专业大学生职业生涯规划书
2014/01/24 职场文书
民生工作实施方案
2014/05/31 职场文书
MySQL示例讲解数据库约束以及表的设计
2022/06/16 MySQL