Python爬虫实战入门四:使用Cookie模拟登录——获取电子书下载链接



在实际情况中,很多网站的内容都是需要登录之后才能看到,如此我们就需要进行模拟登录,使用登录后的状态进行爬取。这里就需要使用到Cookie。

现在大多数的网站都是使用Cookie跟踪用户的登录状态,一旦网站验证了登录信息,就会将登录信息保存在浏览器的cookie中。网站会把这个cookie作为验证的凭据,在浏览网站的页面是返回给服务器。
因为cookie是保存在本地的,自然cookie就可以进行篡改和伪造,暂且不表,我们先来看看Cookie长什么样子。
打开网页调试工具,随便打开一个网页,在“network”选项卡,打开一个链接,在headers里面:

Cookie

我们复制出来看看:

由一个个键值对组成。
接下来,我们以看看豆(http://kankandou.com)的一本书籍的详情页为例,讲解一下Cookie的使用。
看看豆是一个电子书下载网站,自己Kindle上的书多是从这上面找寻到的。
示例网址为:https://kankandou.com/book/view/22353.html
正常情况下,未登录用户是看不到下载链接的,比如这样:


隐藏了书籍的下载链接。
其头信息如下:

头信息

我们再看看登录之后的页面:

登录后

下载链接已经显示出来了,我们看看头信息的Cookie部分

登陆后Cookie

很明显地与之前未登录状态下的Cookie有区别。
接下来,我们按照上一章爬取腾讯新闻的方法,对示例网址(https://kankandou.com/book/view/22353.html)进行HTTP请求:

结果如下:

结果

我们从中找到下载链接存在的栏目“书籍导购”的HTML代码:

如同我们在未登录状态使用浏览器访问这个网址一样,只显示了亚马逊的购买链接,而没有电子格式的下载链接。
我们尝试使用以下登录之后的Cookie:
使用Cookie有两种方式,
1、直接将Cookie写在header头部
完整代码如下:

上述代码返回了对页面(https://kankandou.com/book/view/22353.html)的响应,
我们搜索响应的代码,

带Cookie请求

红色椭圆的部分与未带Cookie访问是返回的HTML一致,为亚马逊的购买链接,
红色矩形部分则为电子书的下载链接,这是在请求中使用的Cookie才出现的
对比实际网页中的模样,与用网页登录查看的显示页面是一致的。
功能完成。接下来看看第二种方式
2、使用requests插入Cookie
完整代码如下:

如此获取到的也是登录后显示的HTML:

requests

这样,我们就轻松的使用Cookie获取到了需要登录验证后才能浏览到的网页和资源了。
这里只是简单介绍了对Cookie的使用,关于Cookie如何获取,手动复制是一种办法,通过代码获取,需要使用到Selenium,接下来的章节会讲解,这里暂且不表。

  1. 匿名说道:

    大佬,就是第二部的使用requests插入cookie中,cookie信息怎么筛选的???

  2. 匿名说道:

    能给个看看豆的推荐码用来注册吗?练习该节用

    1. zmister说道:

      刚刚看了一下,没发现获取邀请码的地方,不好意思

      1. 匿名说道:

        看看都好像登录不上去了

        1. zmister说道:

          那个网站在文章发表后,应该被关闭了,好尴尬哈。知道了原理,用其他的网站试验也是一样的。

  3. Leo-Chen说道:

    博主,看看豆邀请码怎么得,不然整个教程都做不了啊,一直再看你的教程,我搜了下看看豆邀请码没办法获取啊,博主账号借我用一下行不,可以发我邮箱362774405@qq.com吗?

  4. 无怀氏说道:

    每章来一赞!

  5. 痞子周说道:

    请问那个下方输出框书记导购的查找框是怎么设置的

  6. 张三岁说道:

    示列网址怎么不对呢

    1. zmister说道:

      听说这个网站被封了

  7. 匿名说道:

    想问问版主用的是哪个文本编辑器啊

    1. zmister说道:

      用的很多,sublime、notepad++、atom都有用,专门写Python的时候还是用的PyCharm

  8. Ly1e说道:

    想知道楼主用的是py的哪个文本编辑器啊

    1. zmister说道:

      用的很多,sublime、notepad++、atom都有用,专门写Python的时候还是用的PyCharm

      1. L说道:

        用付费版吗还是用Community?

      2. Ly1e说道:

        PyCharm用Professional还是Community呢

        1. zmister说道:

          社区版的功能足够使用了

          1. Ly1e说道:

            我是初学的小白,你的代码我在Geany这个文本编辑器上可以运行,但是刚刚在下了PyCharm,代码没办法执行,为什么呢,是没配置好吗

  9. chalkit说道:

    这篇文章解决了我一个重要问题,cookies只需要在headers中发送就行了。

  10. 匿名说道:

    能不能实例更新一下 实例网站被封了

发表评论

电子邮件地址不会被公开。