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中序列与字典的相同和不同之处
Jan 19 Python
八大排序算法的Python实现
Jan 28 Python
Python pandas常用函数详解
Feb 07 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
Apr 27 Python
Python操作Excel插入删除行的方法
Dec 10 Python
PyQT5 QTableView显示绑定数据的实例详解
Jun 25 Python
Tensorflow实现酸奶销量预测分析
Jul 19 Python
树莓派安装OpenCV3完整过程的实现
Oct 10 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
python判断正负数方式
Jun 03 Python
Python基于xlrd模块处理合并单元格
Jul 28 Python
Python LMDB库的使用示例
Feb 14 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
MySQL连接数超过限制的解决方法
2011/07/17 PHP
PHP register_shutdown_function函数的深入解析
2013/06/03 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
PHP实现的XXTEA加密解密算法示例
2018/08/28 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
2019/03/22 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
ajax 文件上传应用简单实现
2009/03/03 Javascript
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
firefox下input type=&quot;file&quot;的size是多大
2011/10/24 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
js Select下拉列表框进行多选、移除、交换内容的具体实现方法
2013/08/13 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
用js正确判断用户名cookie是否存在的方法
2014/01/28 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
菊花转动的jquery加载动画效果
2018/08/19 jQuery
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
浅探express路由和中间件的实现
2019/09/30 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
matplotlib绘图实例演示标记路径
2018/01/23 Python
python 多线程将大文件分开下载后在合并的实例
2018/11/09 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
对Python中一维向量和一维向量转置相乘的方法详解
2019/08/26 Python
python编写简单端口扫描器
2019/09/04 Python
Python 读取WAV音频文件 画频谱的实例
2020/03/14 Python
keras 如何保存最佳的训练模型
2020/05/25 Python
浅谈python 调用open()打开文件时路径出错的原因
2020/06/05 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
如何查看python关键字
2021/01/17 Python
canvas压缩图片以及卡片制作的方法示例
2018/12/04 HTML / CSS
精选奢华:THE LIST
2019/09/05 全球购物
体检通知范文
2015/04/21 职场文书