网页爬虫之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 相关文章推荐
不错的新闻标题颜色效果
Dec 10 Javascript
原生js实现跨浏览器获取鼠标按键的值
Apr 08 Javascript
js创建表单元素并使用submit进行提交
Aug 14 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
Mar 14 Javascript
深入分析node.js的异步API和其局限性
Sep 05 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
Feb 08 Javascript
JavaScript之实现一个简单的Vue示例
Jan 17 Javascript
node.js命令行教程图文详解
May 27 Javascript
js回文数的4种判断方法示例
Jun 04 Javascript
Vue数字输入框组件使用方法详解
Feb 10 Javascript
Vue作用域插槽实现方法及作用详解
Jul 08 Javascript
javascript前端和后台进行数据交互方法示例
Aug 07 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 substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
PHP正则表达式匹配替换与分割功能实例浅析
2017/02/04 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
javascript 浏览器检测代码精简版
2010/03/04 Javascript
解析jquery获取父窗口的元素
2013/06/26 Javascript
javascript实现倒计时并弹窗提示特效
2015/06/05 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
微信小程序五星评分效果实现代码
2017/04/06 Javascript
Bootstrap模态框插入视频的实现代码
2017/06/25 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
Vue中android4.4不兼容问题的解决方法
2018/09/04 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
浅谈layer弹出层按钮颜色修改方法
2019/09/11 Javascript
微信小程序全局变量GLOBALDATA的定义和调用过程解析
2019/09/23 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
python获取豆瓣电影简介代码分享
2014/01/16 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
2019/04/15 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
深入浅析python变量加逗号,的含义
2020/02/22 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
HTML5 audio标签使用js进行播放控制实例
2015/04/24 HTML / CSS
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
生产部主管岗位职责
2014/01/06 职场文书
小班重阳节活动方案
2014/02/08 职场文书
2014班子“三严三实”对照检查材料思想汇报
2014/09/18 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
学生犯错保证书
2015/05/09 职场文书
悬崖上的金鱼姬观后感
2015/06/15 职场文书
单身证明范本
2015/06/15 职场文书
2016年庆祝六一儿童节活动总结
2016/04/06 职场文书
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers
gojs实现蚂蚁线动画效果
2022/02/18 Javascript
python实现双向链表原理
2022/05/25 Python