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编程中的命名空间与作用域
Oct 16 Python
在Mac OS上搭建Python的开发环境
Dec 24 Python
python3设计模式之简单工厂模式
Oct 17 Python
解决seaborn在pycharm中绘图不出图的问题
May 24 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
Apr 10 Python
如何利用Python开发一个简单的猜数字游戏
Sep 22 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
Pycharm debug调试时带参数过程解析
Feb 03 Python
python实现用户名密码校验
Mar 18 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
Jul 01 Python
python操作链表的示例代码
Sep 27 Python
Python批量删除mysql中千万级大量数据的脚本分享
Dec 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
几种显示数据的方法的比较
2006/10/09 PHP
基于PHP+Ajax实现表单验证的详解
2013/06/25 PHP
thinkphp3.2实现上传图片的控制器方法
2016/04/28 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
php gethostbyname获取域名ip地址函数详解
2010/01/24 Javascript
Extjs实现进度条的两种便捷方式
2013/09/26 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
JS cookie中文乱码解决方法
2014/01/28 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
分享一则JavaScript滚动条插件源码
2015/03/03 Javascript
jQuery插件Slider Revolution实现响应动画滑动图片切换效果
2015/06/05 Javascript
jQuery获取URL请求参数的方法
2015/07/18 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
2016/12/11 Javascript
jQuery元素选择器实例代码
2017/02/06 Javascript
详解angular2封装material2对话框组件
2017/03/03 Javascript
js禁止浏览器页面后退功能的实例(推荐)
2017/09/01 Javascript
BootStrap模态框不垂直居中的解决方法
2017/10/19 Javascript
详解如何用babel转换es6的class语法
2018/04/03 Javascript
ES6 Promise对象的应用实例分析
2019/06/27 Javascript
JavaScript实现秒杀时钟倒计时
2019/09/29 Javascript
一看就会的vuex实现登录验证(附案例)
2020/01/09 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
Vue点击切换Class变化,实现Active当前样式操作
2020/07/17 Javascript
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
2019/07/02 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
2020/02/13 Python
利用python控制Autocad:pyautocad方式
2020/06/01 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
温泉秘密:Onsen Secret
2020/07/06 全球购物
有个性的自我评价范文
2013/11/15 职场文书
网络优化专员求职信
2014/05/04 职场文书
安全月活动总结
2014/05/05 职场文书
2015年高校图书馆工作总结
2015/04/30 职场文书
生死抉择观后感
2015/06/09 职场文书