摘要:爬虫和反爬虫就是一个猫和老鼠的游戏,道高一尺魔高一丈,两者反复纠缠。由于协议的无状态性,登录验证都是通过传递来实现的。通过浏览器登录一次,登录信息的是就会被浏览器保存下来。模块就是这样一个从浏览器提取保存的的工具。
很多用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("(.*?) ", 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。
下面是使用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
目前该模块测试过的浏览器版本还不是很多,你使用过程中可能会遇到问题,可以向作者提交问题:
https://bitbucket.org/richard...
文章来源于:猿人学网站的python教程。
版权申明:若没有特殊说明,文章皆是猿人学原创,没有猿人学授权,请勿以任何形式转载。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/43725.html
摘要:而在中对象用来存储特定用户会话所需的属性及配置信息。当会话过期或被放弃后,服务器将终止该会话。,即该是否仅被使用安全协议传输。安全协议有,等,在网络上传输数据之前先将数据加密。 上一篇文章:Python3网络爬虫实战---17、爬虫基本原理下一篇文章:Python3网络爬虫实战---19、代理基本原理 在浏览网站的过程中我们经常会遇到需要登录的情况,有些页面只有登录之后我们才可以访问...
摘要:学习网络爬虫主要分个大的版块抓取,分析,存储另外,比较常用的爬虫框架,这里最后也详细介绍一下。网络爬虫要做的,简单来说,就是实现浏览器的功能。 Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scrapy,这里最后也详细介绍一下。 首先列举一下本人总结的相关文章,这些覆盖了入门网络爬虫需要的基本概念和技巧:宁哥的小站-网络爬虫,当我们在浏览器中输入...
摘要:在发明之初,为了帮助服务器同步网页上的用户信息,同时保存用户操作,以此减轻服务器压力。由正在浏览的网站创建的被称为第一方。这些第三方怎么来的呢他们又有什么作用了。写在最后了解历史,有助于,我们更好的定位问题。 ...
摘要:所以只要得到登录后的并必要时进行更新,服务器就会认定其为登录状态。看看人家知乎,加密到连名字都没有了,还混淆,如何下手综上,适用于没有加密的登录或者加密算法比较简单并且不常更新的网站。遇上无解的加密算法要么手操拷贝,要么请大佬出场。 某些网站,登录和没登录,用户的权限是不一样的,帐号登录之后才能获取更多的信息。更有甚者一上来就是登录界面,不登录就不给你进去(如p站)。爬取目标不用登录固...
摘要:当我们试图从新浪微博抓取数据时,我们会发现网页上提示未登录,无法查看其他用户的信息。三模拟登录下面将介绍使用获取新浪微博,然后使用提交从而实现模拟登录。 当我们试图从新浪微博抓取数据时,我们会发现网页上提示未登录,无法查看其他用户的信息。模拟登录是定向爬虫制作中一个必须克服的问题,只有这样才能爬取到更多的内容。 showImg(https://segmentfault.com/img/...
阅读 1042·2021-11-22 14:56
阅读 1480·2019-08-30 15:55
阅读 3307·2019-08-30 15:45
阅读 1625·2019-08-30 13:03
阅读 2840·2019-08-29 18:47
阅读 3295·2019-08-29 11:09
阅读 2595·2019-08-26 18:36
阅读 2562·2019-08-26 13:55