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中的正则表达式的用法
Apr 09 Python
详细解读tornado协程(coroutine)原理
Jan 15 Python
钉钉群自定义机器人消息Python封装的实例
Feb 20 Python
python实现对象列表根据某个属性排序的方法详解
Jun 11 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
Nov 01 Python
Python 复平面绘图实例
Nov 21 Python
如何在 Django 模板中输出 &quot;{{&quot;
Jan 24 Python
python数据分析:关键字提取方式
Feb 24 Python
Django 用户登陆访问限制实例 @login_required
May 13 Python
关于Python错误重试方法总结
Jan 03 Python
让文件路径提取变得更简单的Python Path库
May 27 Python
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
Jun 26 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
英雄试炼之肉山谷—引领RPG新潮流
2020/04/20 DOTA
PHP高级编程实例:编写守护进程
2014/09/02 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
基于JQuery的一句代码实现表格的简单筛选
2010/07/26 Javascript
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
DIV外区域Click后关闭DIV的实现代码
2011/12/21 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
轻松掌握JavaScript中的Math object数学对象
2016/05/26 Javascript
ionic隐藏tabs的方法
2016/08/29 Javascript
Json按某个键的值进行排序
2016/12/22 Javascript
浅谈express 中间件机制及实现原理
2017/08/31 Javascript
vue项目环境变量配置的实现方法
2018/10/12 Javascript
简化版的vue-router实现思路详解
2018/10/19 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
浅析python中的分片与截断序列
2016/08/09 Python
python爱心表白 每天都是浪漫七夕!
2018/08/18 Python
python按时间排序目录下的文件实现方法
2018/10/17 Python
解决每次打开pycharm直接进入项目的问题
2018/10/28 Python
python图形工具turtle绘制国际象棋棋盘
2019/05/23 Python
python笔记_将循环内容在一行输出的方法
2019/08/08 Python
python 字段拆分详解
2019/12/17 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
Django中和时区相关的安全问题详解
2020/10/12 Python
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
JSF如何进行表格处理及取值
2012/08/06 面试题
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书
晚会开幕词范文
2016/03/04 职场文书
python 通过使用Yolact训练数据集
2021/04/06 Python
Python开发五子棋小游戏
2022/04/28 Python