网页爬虫之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快速检测浏览器对CSS3特性的支持情况
Sep 26 Javascript
实现点击列表弹出列表索引的两种方式
Mar 08 Javascript
js实现单一html页面两套css切换代码
Apr 11 Javascript
JS获取各种宽度、高度的简单介绍
Dec 19 Javascript
详解JavaScript编程中的数组结构
Oct 24 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
Mar 18 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
Jun 07 Javascript
基于JavaScript实现购物网站商品放大镜效果
Sep 06 Javascript
xcode中获取js文件的路径方法(推荐)
Nov 05 Javascript
ionic2打包android时gradle无法下载的解决方法
Apr 05 Javascript
node.js中express-session配置项详解
May 31 Javascript
javascript基本常用排序算法解析
Sep 27 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
php+AJAX传送中文会导致乱码的问题的解决方法
2008/09/08 PHP
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
js函数在frame中的相互调用详解
2014/03/03 Javascript
jquery实现select选中行、列合计示例
2014/04/25 Javascript
Bootstrap企业网站实战项目4
2016/10/14 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
微信小程序实现移动端滑动分页效果(ajax)
2017/06/13 Javascript
js取小数点后两位四种方法
2019/01/18 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
2020/07/29 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
2020/10/02 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
简单的连接MySQL与Python的Bottle框架的方法
2015/04/30 Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
2019/10/14 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
浅谈django框架集成swagger以及自定义参数问题
2020/07/07 Python
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
Speedo速比涛中国官方网站:全球领先泳装运动品牌
2018/04/24 全球购物
超市营业员求职简历的自我评价
2013/10/17 职场文书
超市开学活动方案
2014/03/01 职场文书
企业领导班子四风对照检查材料
2014/09/27 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
销售人员管理制度
2015/08/06 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
golang gopm get -g -v 无法获取第三方库的解决方案
2021/05/05 Golang
Spring Cloud 中@FeignClient注解中的contextId属性详解
2021/09/25 Java/Android