网页爬虫之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读取XML文件示例代码
Nov 15 Javascript
jquery动态加载js/css文件方法(自写小函数)
Oct 11 Javascript
js检测iframe是否加载完成的方法
Nov 26 Javascript
设置点击文本框或图片弹出日历控件的实现代码
May 12 Javascript
浅谈javascript中new操作符的原理
Jun 07 Javascript
深入理解JS实现快速排序和去重
Oct 17 Javascript
关于vue.js组件数据流的问题
Jul 26 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
Nov 15 Javascript
Bootstrap模态对话框用法简单示例
Aug 31 Javascript
java实现单链表增删改查的实例代码详解
Aug 30 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
Jul 14 jQuery
js实现盒子拖拽动画效果
Aug 09 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生成静态页面详解
2006/12/05 PHP
推荐php模板技术[转]
2007/01/04 PHP
xml在joomla表单中的应用详解分享
2012/07/19 PHP
利用javascript实现一些常用软件的下载导航
2009/08/03 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
javascript使用数组的push方法完成快速排序
2014/09/15 Javascript
jQuery检查事件是否触发的方法
2015/06/26 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
2017/02/28 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
优雅的在React项目中使用Redux的方法
2018/11/10 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
JS实现时间校验的代码
2020/05/25 Javascript
Python使用django获取用户IP地址的方法
2015/05/11 Python
python简单实现刷新智联简历
2016/03/30 Python
Python自动化运维和部署项目工具Fabric使用实例
2016/09/18 Python
django 按时间范围查询数据库实例代码
2018/02/11 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
python使用turtle库绘制树
2018/06/25 Python
详解django中使用定时任务的方法
2018/09/27 Python
python自动化生成IOS的图标
2018/11/13 Python
Python队列、进程间通信、线程案例
2019/10/25 Python
Python判断字符串是否为空和null方法实例
2020/04/26 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
利用python实现后端写网页(flask框架)
2021/02/28 Python
css3弹性盒子flex实现三栏布局的实现
2020/11/12 HTML / CSS
美国体育用品商店:Paragon Sports
2017/10/08 全球购物
澳大利亚领先的优质葡萄酒拍卖会:Langton’s Fine Wines
2019/03/24 全球购物
vue+django实现下载文件的示例
2021/03/24 Vue.js
个人实用的自我评价范文
2013/11/23 职场文书
影视制作岗位职责
2013/12/04 职场文书
计算机专业职业生涯规划范文
2014/01/19 职场文书
论文答谢词
2015/01/20 职场文书
同事打架检讨书
2015/05/06 职场文书
导游词之海南-南湾猴岛
2019/10/12 职场文书
z-index不起作用
2021/03/31 HTML / CSS