网页爬虫之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 相关文章推荐
js保存当前路径(cookies记录)
Dec 14 Javascript
3款实用的在线JS代码工具(国外)
Mar 15 Javascript
jQuery添加和删除输入文本框标签代码
May 20 Javascript
微信小程序 传值取值的几种方法总结
Jan 16 Javascript
jQuery模拟淘宝购物车功能
Feb 27 Javascript
浅谈Angular4实现热加载开发旅程
Sep 08 Javascript
vue实现条件判断动态绑定样式的方法
Sep 29 Javascript
200行HTML+JavaScript实现年会抽奖程序
Jan 22 Javascript
this在vue和小程序中的使用详解
Jan 28 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
Aug 20 Javascript
json字符串对象转换代码实例
Sep 28 Javascript
Angular短信模板校验代码
Sep 23 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投票程序源码
2007/03/11 PHP
用PHP伪造referer突破网盘禁止外连的代码
2008/06/15 PHP
php面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
2017/02/23 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
深入研究PHP中的preg_replace和代码执行
2018/08/15 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
Dom加载让图片加载完再执行的脚本代码
2008/05/15 Javascript
nodejs入门详解(多篇文章结合)
2012/03/07 NodeJs
JS.getTextContent(element,preformatted)使用介绍
2013/09/21 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
实例讲解jquery与json的结合
2016/01/07 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
js制作网站首页图片轮播特效代码
2016/08/30 Javascript
VueJs与ReactJS和AngularJS的异同点
2016/12/12 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
JavaScript实现的原生态Tab标签页功能【兼容IE6】
2017/09/18 Javascript
mint-ui 时间插件使用及获取选择值的方法
2018/02/09 Javascript
ES6基础之数组和对象的拓展实例详解
2019/08/22 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
2016/06/30 Python
浅谈flask中的before_request与after_request
2018/01/20 Python
详解python分布式进程
2018/10/08 Python
python 环境搭建 及python-3.4.4的下载和安装过程
2019/07/20 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
Python模块常用四种安装方式
2020/10/20 Python
python各种excel写入方式的速度对比
2020/11/10 Python
五水共治捐款倡议书
2014/05/14 职场文书
关于召开会议的通知
2015/04/15 职场文书