网页爬虫之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 相关文章推荐
30个最佳jQuery Lightbox效果插件分享
Apr 11 Javascript
js实现表单检测及表单提示的方法
Aug 14 Javascript
JQuery实现简单的图片滑动切换特效
Nov 22 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
Jan 29 Javascript
JavaScript原生数组Array常用方法
Apr 06 Javascript
EasyUI在Panel上动态添加LinkButton按钮
Aug 11 Javascript
[js高手之路]图解javascript的原型(prototype)对象,原型链实例
Aug 28 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
May 26 jQuery
解决layui页面按钮点击无反应,也不报错的问题
Sep 29 Javascript
Vue项目利用axios请求接口下载excel
Nov 17 Vue.js
微信小程序实现modal弹出框遮罩层组件(可带文本框)
Dec 20 Javascript
vue绑定class的三种方法
Dec 24 Vue.js
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
ubuntu下编译安装xcache for php5.3 的具体操作步骤
2013/06/18 PHP
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
详解PHP序列化和反序列化原理
2018/01/15 PHP
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
js中将String转换为number以便比较
2014/07/08 Javascript
js实现跨域的方法实例详解
2015/06/24 Javascript
一览画面点击复选框后获取多个id值的方法
2016/05/30 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
layer弹出层框架alert与msg详解
2017/03/14 Javascript
Bootstrap 响应式实用工具实例详解
2017/03/29 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
Vue+Koa2+mongoose写一个像素绘板的实现方法
2019/09/10 Javascript
JavaScript Canvas编写炫彩的网页时钟
2019/10/16 Javascript
Vue中常用rules校验规则(实例代码)
2019/11/14 Javascript
vue点击标签切换选中及互相排斥操作
2020/07/17 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
python使用paramiko模块实现ssh远程登陆上传文件并执行
2014/01/27 Python
Python语言描述机器学习之Logistic回归算法
2017/12/21 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
django 微信网页授权认证api的步骤详解
2019/07/30 Python
python 哈希表实现简单python字典代码实例
2019/09/27 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
python 穷举指定长度的密码例子
2020/04/02 Python
python编程的核心知识点总结
2021/02/08 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
珍珠鸟教学反思
2014/02/01 职场文书
优秀毕业生自我鉴定
2014/02/11 职场文书
2015年社区工作总结
2015/04/08 职场文书
2015年司法所工作总结
2015/04/27 职场文书
关于nginx 实现jira反向代理的问题
2021/09/25 Servers