网页爬虫之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 相关文章推荐
漂亮的widgets,支持换肤和后期开发新皮肤
Apr 23 Javascript
基于jquery的图片懒加载js
Jun 30 Javascript
Javascript Function对象扩展之延时执行函数
Jul 06 Javascript
分享14个很酷的jQuery导航菜单插件
Apr 25 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
Jul 01 Javascript
node.js中的url.parse方法使用说明
Dec 10 Javascript
JavaScript 字符串常用操作小结(非常实用)
Nov 30 Javascript
JS和canvas实现俄罗斯方块
Mar 14 Javascript
详解jquery和vue对比
Apr 16 jQuery
Vue事件修饰符native、self示例详解
Jul 09 Javascript
jquery检测上传文件大小示例
Apr 26 jQuery
原生JS实现京东查看商品点击放大
Dec 21 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配置文件中最常用四个ini函数
2007/03/19 PHP
php 友好URL的实现(吐血推荐)
2008/10/04 PHP
在Nginx上部署ThinkPHP项目教程
2015/02/02 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
php使用curl实现简单模拟提交表单功能
2017/05/15 PHP
PHP asXML()函数讲解
2019/02/03 PHP
如何在Mozilla Gecko 用Javascript加载XSL
2007/01/09 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
JS实现的论坛Ajax打分效果完整实例
2015/10/31 Javascript
基于bootstrap的选择框插件icheck
2016/12/23 Javascript
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
vue项目中js-cookie的使用存储token操作
2020/11/13 Javascript
[01:09:19]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第二场 2月28日
2021/03/11 DOTA
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
Python多线程实现同步的四种方式
2017/05/02 Python
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
python之matplotlib学习绘制动态更新图实例代码
2018/01/23 Python
mac 安装python网络请求包requests方法
2018/06/13 Python
Python基于xlrd模块操作Excel的方法示例
2018/06/21 Python
python实现文件助手中查看微信撤回消息
2019/04/29 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
如何使用python传入不确定个数参数
2020/02/18 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
有模特经验的简历自我评价
2013/09/19 职场文书
公司营业员的工作总结自我评价
2013/10/05 职场文书
班队活动设计方案
2014/01/30 职场文书
收银员的岗位职责范本
2014/02/04 职场文书
幼儿园门卫岗位职责
2014/02/14 职场文书
《雨霖铃》教学反思
2014/02/22 职场文书
学雷锋活动总结范文
2014/04/25 职场文书
教师理论学习心得体会
2016/01/21 职场文书
公司晚会主持词
2019/04/17 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP
深入解析MySQL索引数据结构
2021/10/16 MySQL