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 排列组合之itertools
Mar 20 Python
python paramiko实现ssh远程访问的方法
Dec 03 Python
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
Dec 03 Python
教大家玩转Python字符串处理的七种技巧
Mar 31 Python
Flask框架信号用法实例分析
Jul 24 Python
python面试题小结附答案实例代码
Apr 11 Python
Python切图九宫格的实现方法
Oct 10 Python
在Python中使用turtle绘制多个同心圆示例
Nov 23 Python
使用Python脚本从文件读取数据代码实例
Jan 19 Python
深入浅析Python代码规范性检测
Jul 31 Python
Django restful framework生成API文档过程详解
Nov 12 Python
python自动统计zabbix系统监控覆盖率的示例代码
Apr 03 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弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
js 中 document.createEvent的用法
2010/08/29 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
2014/01/07 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
2014/06/20 Javascript
js实现点击添加一个input节点
2014/12/05 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
详解AngularJS如何实现跨域请求
2016/08/22 Javascript
Jquery组件easyUi实现表单验证示例
2016/08/23 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
2016/12/07 Javascript
js 轮播效果实例分享
2016/12/28 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
vue移动UI框架滑动加载数据的方法
2018/03/12 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
2018/08/20 Javascript
js实现前面自动补全位数的方法
2018/10/10 Javascript
js中apply和call的理解与使用方法
2019/11/27 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
Python解析、提取url关键字的实例详解
2018/12/17 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
Python3 max()函数基础用法
2019/02/19 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
python pip如何手动安装二进制包
2020/09/30 Python
纯CSS3实现8组超炫酷鼠标滑过图片动画
2016/03/16 HTML / CSS
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
教育科学研究生自荐信
2013/10/09 职场文书
医学检验专业自荐信
2014/09/18 职场文书
拿破仑传读书笔记
2015/07/01 职场文书
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL
Python中request的基本使用解决乱码问题
2022/04/12 Python
el-table-column 内容不自动换行的解决方法
2022/08/14 Vue.js