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 Web服务器Tornado使用小结
May 06 Python
在Python的Flask框架中实现单元测试的教程
Apr 20 Python
Python3字符串学习教程
Aug 20 Python
python决策树之CART分类回归树详解
Dec 20 Python
python 列表,数组,矩阵两两转换tolist()的实例
Apr 04 Python
python检测主机的连通性并记录到文件的实例
Jun 21 Python
使用python对excle和json互相转换的示例
Oct 23 Python
Pycharm之快速定位到某行快捷键的方法
Jan 20 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 Python
python 实现音频叠加的示例
Oct 29 Python
运行python提示no module named sklearn的解决方法
Nov 29 Python
DRF使用simple JWT身份验证的实现
Jan 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
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
深入PHP购物车模块功能分析(函数讲解,附源码)
2013/06/25 PHP
使用PHP Socket写的POP3类
2013/10/30 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
简单的js分页脚本
2009/05/21 Javascript
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
2013/07/31 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
Windows 系统下设置Nodejs NPM全局路径
2016/04/26 NodeJs
基于JavaScript实现图片剪切效果
2017/03/07 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
layer.confirm取消按钮绑定事件的方法
2018/08/17 Javascript
JS实现TITLE悬停长久显示效果完整示例
2020/02/11 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
Python中的ConfigParser模块使用详解
2015/05/04 Python
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
利用python发送和接收邮件
2016/09/27 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
Python使用re模块验证危险字符
2020/05/21 Python
canvas绘制视频封面的方法
2018/02/05 HTML / CSS
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
2014年卫生保健工作总结
2014/12/08 职场文书
2015年春节标语口号
2014/12/09 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL
15个值得收藏的JavaScript函数
2021/09/15 Javascript