资讯专栏INFORMATION COLUMN

Python爬虫使用浏览器的cookies:browsercookie

xuexiangjys / 2881人阅读

摘要:爬虫和反爬虫就是一个猫和老鼠的游戏,道高一尺魔高一丈,两者反复纠缠。由于协议的无状态性,登录验证都是通过传递来实现的。通过浏览器登录一次,登录信息的是就会被浏览器保存下来。模块就是这样一个从浏览器提取保存的的工具。

很多用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网络爬虫实战---18、Session和Cookies

    摘要:而在中对象用来存储特定用户会话所需的属性及配置信息。当会话过期或被放弃后,服务器将终止该会话。,即该是否仅被使用安全协议传输。安全协议有,等,在网络上传输数据之前先将数据加密。 上一篇文章:Python3网络爬虫实战---17、爬虫基本原理下一篇文章:Python3网络爬虫实战---19、代理基本原理 在浏览网站的过程中我们经常会遇到需要登录的情况,有些页面只有登录之后我们才可以访问...

    SHERlocked93 评论0 收藏0
  • Python入门网络爬虫之精华版

    摘要:学习网络爬虫主要分个大的版块抓取,分析,存储另外,比较常用的爬虫框架,这里最后也详细介绍一下。网络爬虫要做的,简单来说,就是实现浏览器的功能。 Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scrapy,这里最后也详细介绍一下。 首先列举一下本人总结的相关文章,这些覆盖了入门网络爬虫需要的基本概念和技巧:宁哥的小站-网络爬虫,当我们在浏览器中输入...

    Bmob 评论0 收藏0
  • Python爬虫理论之cookie验证,不回顾下历史,套路都不知道怎么来

    摘要:在发明之初,为了帮助服务器同步网页上的用户信息,同时保存用户操作,以此减轻服务器压力。由正在浏览的网站创建的被称为第一方。这些第三方怎么来的呢他们又有什么作用了。写在最后了解历史,有助于,我们更好的定位问题。 ...

    fuyi501 评论0 收藏0
  • Python 从零开始爬虫(九)——模拟登录,cookie使用

    摘要:所以只要得到登录后的并必要时进行更新,服务器就会认定其为登录状态。看看人家知乎,加密到连名字都没有了,还混淆,如何下手综上,适用于没有加密的登录或者加密算法比较简单并且不常更新的网站。遇上无解的加密算法要么手操拷贝,要么请大佬出场。 某些网站,登录和没登录,用户的权限是不一样的,帐号登录之后才能获取更多的信息。更有甚者一上来就是登录界面,不登录就不给你进去(如p站)。爬取目标不用登录固...

    edgardeng 评论0 收藏0
  • Python定向爬虫,模拟新浪微博登录!

    摘要:当我们试图从新浪微博抓取数据时,我们会发现网页上提示未登录,无法查看其他用户的信息。三模拟登录下面将介绍使用获取新浪微博,然后使用提交从而实现模拟登录。 当我们试图从新浪微博抓取数据时,我们会发现网页上提示未登录,无法查看其他用户的信息。模拟登录是定向爬虫制作中一个必须克服的问题,只有这样才能爬取到更多的内容。 showImg(https://segmentfault.com/img/...

    isaced 评论0 收藏0

发表评论

0条评论

xuexiangjys

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<