网页爬虫之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 相关文章推荐
javascript中的location用法简单介绍
Mar 07 Javascript
js获取单选框或复选框值及操作
Dec 18 Javascript
jquery禁用右键示例
Apr 28 Javascript
使用js获取图片原始尺寸
Dec 03 Javascript
分享javascript计算时间差的示例代码
Mar 19 Javascript
总结JavaScript设计模式编程中的享元模式使用
May 21 Javascript
JS之相等操作符详解
Sep 13 Javascript
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
Jun 12 jQuery
Vue + Element UI图片上传控件使用详解
Aug 20 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
Sep 17 Javascript
JavaScript中的this妙用实例分析
May 09 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
Sep 01 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 error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
2017/04/05 PHP
PHP中trait使用方法详细介绍
2017/05/21 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
jQuery页面图片伴随滚动条逐渐显示的小例子
2013/03/21 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
JS实现CheckBox复选框全选全不选功能
2015/05/06 Javascript
javascript实现简单加载随机色方块
2015/12/25 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
Ajax基础知识详解
2017/02/17 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
JavaScript实现职责链模式概述
2018/01/25 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
微信小程序个人中心的列表控件实现代码
2020/04/26 Javascript
Python中几种导入模块的方式总结
2017/04/27 Python
python构建自定义回调函数详解
2017/06/20 Python
Python安装pycurl失败的解决方法
2018/10/15 Python
python 字符串常用方法汇总详解
2019/09/16 Python
如何利用python web框架做文件流下载的实现示例
2020/06/02 Python
在python下实现word2vec词向量训练与加载实例
2020/06/09 Python
python 实现音频叠加的示例
2020/10/29 Python
recorder.js 基于Html5录音功能的实现
2020/05/26 HTML / CSS
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
麦当劳辞职信范文
2014/01/18 职场文书
意向书范文
2014/03/31 职场文书
教师党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
2014年科普工作总结
2014/12/06 职场文书
关于社会实践的心得体会(2016最新版)
2016/01/25 职场文书
感谢信
2019/04/11 职场文书
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers
Go gorilla securecookie库的安装使用详解
2022/08/14 Golang