网页爬虫之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 相关文章推荐
基于JQuery的一个简单的鼠标跟随提示效果
Sep 23 Javascript
javascript实现上传图片并预览的效果实现代码
Apr 11 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
Aug 09 Javascript
js网页滚动条滚动事件实例分析
May 05 Javascript
javascript实现对表格元素进行排序操作
Nov 18 Javascript
Angularjs实现多个页面共享数据的方式
Mar 29 Javascript
jQuery实现手机版页面翻页效果的简单实例
Oct 05 Javascript
ReactNative踩坑之配置调试端口的解决方法
Jul 28 Javascript
Vue实现web分页组件详解
Nov 28 Javascript
vue中引入mxGraph的步骤详解
May 17 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
Dec 16 Javascript
详解Vue项目的打包方式(生成dist文件)
Jan 18 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
apache php mysql开发环境安装教程
2016/07/28 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
事件绑定之小测试  onclick && addEventListener
2011/07/31 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
2013/07/17 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
js实现网页自动刷新可制作节日倒计时效果
2014/05/27 Javascript
全系IE支持Bootstrap的解决方法
2015/10/19 Javascript
Node.js程序中的本地文件操作用法小结
2016/03/06 Javascript
JavaScript组合模式学习要点
2016/08/26 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
js字符限制(字符截取) 一个中文汉字算两个字符
2017/09/12 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
vue中echarts3.0自适应的方法
2018/02/26 Javascript
基于Vue实现拖拽效果
2018/04/27 Javascript
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
小程序如何定位所在城市及发起周边搜索
2020/02/11 Javascript
解决vuex数据页面刷新后初始化操作
2020/07/26 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
Python中的is和id用法分析
2015/01/26 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
临床医学系毕业生推荐信
2013/11/09 职场文书
《大自然的语言》教学反思
2014/04/08 职场文书
原料仓仓管员岗位职责
2014/07/08 职场文书
北京英语导游词
2015/02/12 职场文书
同学聚会感言一句话
2015/07/30 职场文书
MySQL 如何设计统计数据表
2021/06/15 MySQL