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中执行shell的两种方法总结
Jan 10 Python
Python爬虫之模拟知乎登录的方法教程
May 25 Python
对python中的xlsxwriter库简单分析
May 04 Python
Python 给某个文件名添加时间戳的方法
Oct 16 Python
使用TensorFlow实现二分类的方法示例
Feb 05 Python
搞定这套Python爬虫面试题(面试会so easy)
Apr 03 Python
Python实现堡垒机模式下远程命令执行操作示例
May 09 Python
对Django url的几种使用方式详解
Aug 06 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
Oct 27 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
Dec 17 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
Jan 06 Python
解决Python import .pyd 可能遇到路径的问题
Mar 04 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采用file_get_contents代替使用curl实例
2014/11/07 PHP
PHP获取文件行数的方法
2015/06/10 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
2016/05/19 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
2017/04/05 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
jQuery修改CSS伪元素属性的方法
2014/07/30 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
快速入门Vue
2016/12/19 Javascript
jQuery监听浏览器窗口大小的变化实例
2017/02/07 Javascript
解决URL地址中的中文乱码问题的办法
2017/02/10 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
原生js调用json方法总结
2018/02/22 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
2020/06/08 Javascript
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
Python解析多帧dicom数据详解
2020/01/13 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
2020/03/14 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
2020/05/25 Python
Python 远程开关机的方法
2020/11/18 Python
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
雷锋精神演讲稿
2014/05/13 职场文书
创优争先心得体会
2014/09/11 职场文书
Python异常类型以及处理方法汇总
2021/06/05 Python
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers