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实现ftp客户端示例分享
Feb 17 Python
python去掉字符串中重复字符的方法
Feb 27 Python
Python 多进程和数据传递的理解
Oct 09 Python
windows下搭建python scrapy爬虫框架步骤
Dec 23 Python
Python多版本开发环境管理工具介绍
Jul 03 Python
Python如何筛选序列中的元素的方法实现
Jul 15 Python
python plotly绘制直方图实例详解
Jul 22 Python
Python如何使用bokeh包和geojson数据绘制地图
Mar 21 Python
Python中常用的os操作汇总
Nov 05 Python
pycharm 配置svn的图文教程(手把手教你)
Jan 15 Python
OpenCV全景图像拼接的实现示例
Jun 05 Python
python之json文件转xml文件案例讲解
Aug 07 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
Apache中php.ini的设置方法
2013/02/28 PHP
php函数间的参数传递(值传递/引用传递)
2013/09/23 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
PHP数组常用函数实例小结
2018/08/20 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
JS 动态获取节点代码innerHTML分析 [IE,FF]
2009/11/30 Javascript
javaScript复制功能调用实现方案
2012/12/13 Javascript
jQuery+jRange实现滑动选取数值范围特效
2015/03/14 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
jquery验证手机号是否正确实例讲解
2015/11/17 Javascript
jquery获取复选框的值的简单实例
2016/05/26 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
Python中的rjust()方法使用详解
2015/05/19 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
用pycharm开发django项目示例代码
2018/10/24 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
详解Python字符串切片
2019/05/20 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
2020/02/20 Python
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
什么是组件架构
2016/05/15 面试题
继电保护工岗位职责
2014/01/05 职场文书
商业项目策划方案
2014/06/05 职场文书
群众路线四风对照检查材料
2014/11/04 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书
python中pandas对多列进行分组统计的实现
2021/06/18 Python
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技
Golang 链表的学习和使用
2022/04/19 Golang
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers