网页爬虫之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去空格的正则表达式
Mar 26 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
Mar 31 Javascript
AngularJS基础知识笔记之过滤器
May 10 Javascript
AngularJs  Understanding Angular Templates
Sep 02 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
Feb 03 Javascript
vue.js路由跳转详解
Aug 28 Javascript
Angular4绑定html内容出现警告的处理方法
Nov 03 Javascript
vue实现2048小游戏功能思路详解
May 09 Javascript
微信小程序实现提交input信息到后台的方法示例
Jan 19 Javascript
微信小程序封装多张图片上传api代码实例
Dec 30 Javascript
实现一个Vue自定义指令懒加载的方法示例
Jun 04 Javascript
uniapp 微信小程序 自定义tabBar 导航
Apr 22 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
第十三节--对象串行化
2006/11/16 PHP
php项目中百度 UEditor 简单安装调试和调用
2015/07/15 PHP
PHP发送短信代码分享
2015/08/11 PHP
yii通过小物件生成view的方法
2016/10/08 PHP
利用javascript查看html源文件
2006/11/08 Javascript
用JavaScript脚本实现Web页面信息交互
2006/12/21 Javascript
Jquery 跨域访问 Lightswitch OData Service的方法
2013/09/11 Javascript
js报$ is not a function 的问题的解决方法
2014/01/20 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
jquery+Jscex打造游戏力度条
2020/09/12 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
使用layer弹窗和layui表单实现新增功能
2018/08/09 Javascript
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
详解小程序设置缓存并且不覆盖原有数据
2019/04/15 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
浅谈Vue2.4.0 $attrs与inheritAttrs的具体使用
2020/03/08 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
Vue 样式切换及三元判断样式关联操作
2020/08/09 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
Python下的twisted框架入门指引
2015/04/15 Python
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
python实现决策树分类算法
2017/12/21 Python
基于python实现名片管理系统
2018/11/30 Python
Python基础教程之if判断,while循环,循环嵌套
2019/04/25 Python
Python实现的栈、队列、文件目录遍历操作示例
2019/05/06 Python
CSS3 :nth-child()伪类选择器实现奇偶行显示不同样式
2013/11/05 HTML / CSS
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
美国厨房和园艺工具网上商店:Nestneed
2019/08/24 全球购物
工作中个人的自我评价
2013/12/31 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
职业道德模范事迹材料
2014/08/24 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
武夷山导游词
2015/02/03 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书