Python爬虫使用浏览器cookies:browsercookie过程解析


Posted in Python onOctober 22, 2019

很多用Python的人可能都写过网络爬虫,自动化获取网络数据确实是一件令人愉悦的事情,而Python很好的帮助我们达到这种愉悦。然而,爬虫经常要碰到各种登录、验证的阻挠,让人灰心丧气(网站:天天碰到各种各样的爬虫抓我们网站,也很让人灰心丧气~)。爬虫和反爬虫就是一个猫和老鼠的游戏,道高一尺魔高一丈,两者反复纠缠。

由于http协议的无状态性,登录验证都是通过传递cookies来实现的。通过浏览器登录一次,登录信息的cookie是就会被浏览器保存下来。下次再打开该网站时,浏览器自动带上保存的cookies,只有cookies还未过期,对于网站来说你就还是登录状态的。

browsercookie模块就是这样一个从浏览器提取保存的cookies的工具。它是一个很有用的爬虫工具,通过加载你浏览器的cookies到一个cookiejar对象里面,让你轻松下载需要登录的网页内容。

安装

pip install browsercookie

在Windows系统中,内置的sqlite模块在加载FireFox数据库时会抛出错误。需要更新sqlite的版本:

pip install pysqlite

使用方法

下面是从网页提取标题的例子:

>>> import re
>>> get_title = lambda html: re.findall('<title>(.*?)</title>', html, flags=re.DOTALL)[0].strip()

下面是未登录状况下下载得到的标题:

>>> import urllib2
>>> url = 'https://bitbucket.org/'
>>> public_html = urllib2.urlopen(url).read()
>>> get_title(public_html)
'Git and Mercurial code management for teams'

接下来使用browsercookie从登录过Bitbucket的FireFox里面获取cookie再下载:

>>> import browsercookie
>>> cj = browsercookie.firefox()
>>> opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
>>> login_html = opener.open(url).read()
>>> get_title(login_html)
'richardpenman / home — Bitbucket'

上面是Python2的代码,再试试 Python3:

>>> import urllib.request
>>> public_html = urllib.request.urlopen(url).read()
>>> opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))

你可以看到你的用户名出现在title里面了,说明browsercookie模块成功从FireFox加载了cookies。小编整理一套Python资料和PDF,有需要Python学习资料可以加学习群:631441315 ,反正闲着也是闲着呢,不如学点东西啦~~

下面是使用requests的例子,这次我们从Chrome里面加载cookies,当然你需要事先用Chrome登录Bitbucket:

>>> import requests
>>> cj = browsercookie.chrome()
>>> r = requests.get(url, cookies=cj)
>>> get_title(r.content)
'richardpenman / home — Bitbucket'

如果你不知道或不关心那个浏览器有你需要的cookies,你可以这样操作:

>>> cj = browsercookie.load()
>>> r = requests.get(url, cookies=cj)
>>> get_title(r.content)
'richardpenman / home — Bitbucket'

支持

目前,该模块支持以下平台:

Chrome: Linux, OSX, Windows

Firefox: Linux, OSX, Windows

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的localtime()方法使用详解
May 22 Python
Python 实现使用dict 创建二维数据、DataFrame
Apr 13 Python
详解django的serializer序列化model几种方法
Oct 16 Python
Python3 读、写Excel文件的操作方法
Oct 20 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
Jan 10 Python
Python for循环搭配else常见问题解决
Feb 11 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 24 Python
Python 代码调试技巧示例代码
Aug 11 Python
python判断字符串以什么结尾的实例方法
Sep 18 Python
Python绘图实现台风路径可视化代码实例
Oct 23 Python
Django视图类型总结
Feb 17 Python
python使用XPath解析数据爬取起点小说网数据
Apr 22 Python
Python异常模块traceback用法实例分析
Oct 22 #Python
Python多线程爬取豆瓣影评API接口
Oct 22 #Python
Python Process多进程实现过程
Oct 22 #Python
详解python中eval函数的作用
Oct 22 #Python
FFT快速傅里叶变换的python实现过程解析
Oct 21 #Python
python 采用paramiko 远程执行命令及报错解决
Oct 21 #Python
python文件读写代码实例
Oct 21 #Python
You might like
php预定义常量
2006/12/25 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
2014/05/04 PHP
YII动态模型(动态表名)支持分析
2016/03/29 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
js或css实现滚动广告的几种方案
2010/01/28 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
Javascript的时间戳和php的时间戳转换注意事项
2013/04/12 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
Jquery Post处理后不进入回调的原因及解决方法
2014/07/15 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
Echarts基本用法_动力节点Java学院整理
2017/08/11 Javascript
利用Node.js检测端口是否被占用的方法
2017/12/07 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
详解vue中axios的使用与封装
2019/03/20 Javascript
原生js实现each方法实例代码详解
2019/05/27 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
vue实现路由监听和参数监听
2019/10/29 Javascript
vue实现在进行增删改操作后刷新页面
2020/08/05 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
使用Python通过win32 COM打开Excel并添加Sheet的方法
2018/05/02 Python
python绘制立方体的方法
2018/07/02 Python
python利用多种方式来统计词频(单词个数)
2019/05/27 Python
Pytorch中.new()的作用详解
2020/02/18 Python
python实现简单的五子棋游戏
2020/09/01 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
使用layui实现左侧菜单栏及动态操作tab项的方法
2020/11/10 HTML / CSS
造型师求职自荐信
2013/09/27 职场文书
内衣营销方案
2014/03/15 职场文书
喷漆工的岗位职责
2014/03/17 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
2014大学班主任工作总结
2014/11/08 职场文书
2015元旦感言
2015/12/09 职场文书
浅谈mysql执行过程以及顺序
2021/05/12 MySQL
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android