Scrapy中使用cookie免于验证登录和模拟登录

Scrapy中使用cookie免于验证登录和模拟登录

引言

python爬虫我认为最困难的问题一个是ip代理,另外一个就是模拟登录了,更操蛋的就是模拟登录了之后还有验证码,真的是不让人省心,不过既然有了反爬虫,那么就有反反爬虫的策略,这里就先介绍一个cookie模拟登陆,后续还有seleminum+phantomjs模拟浏览器登录的文章。还不知道cookie是什么朋友们,可以点击这里

cookie提取方法:

打开谷歌浏览器或者火狐浏览器,如果是谷歌浏览器的按F12这个键就会跳出来浏览器控制台,然后点击Network,之后就是刷新网页开始抓包了,之后在抓到的页面中随便打开一个,就能看到cokie了,但是这里的cookie并不符合python中的格式,因此需要转换格式,下面提供了转换的代码

<span style="color:#000000"><code> <span style="color:#880000"># -*- coding: utf-8 -*-</span>

    <span style="color:#000088">class</span> <span style="color:#4f4f4f">transCookie</span>:
    <span style="color:#000088">def</span> <span style="color:#009900">__init__</span><span style="color:#4f4f4f">(self, cookie)</span>:
        self.cookie = cookie

    <span style="color:#000088">def</span> <span style="color:#009900">stringToDict</span><span style="color:#4f4f4f">(self)</span>:
        <span style="color:#009900">'''
        将从浏览器上Copy来的cookie字符串转化为Scrapy能使用的Dict
        :return:
        '''</span>
        itemDict = {}
        items = self.cookie.split(<span style="color:#009900">';'</span>)
        <span style="color:#000088">for</span> item <span style="color:#000088">in</span> items:
            key = item.split(<span style="color:#009900">'='</span>)[<span style="color:#006666">0</span>].replace(<span style="color:#009900">' '</span>, <span style="color:#009900">''</span>)
            value = item.split(<span style="color:#009900">'='</span>)[<span style="color:#006666">1</span>]
            itemDict[key] = value
        <span style="color:#000088">return</span> itemDict

    <span style="color:#000088">if</span> __name__ == <span style="color:#009900">"__main__"</span>:
    cookie = <span style="color:#009900">"你复制的cookie"</span>
    trans = transCookie(cookie)
    <span style="color:#000088">print</span> trans.stringToDict()
</code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

补充说明:

只需要将你网页上的cookie复制到上述代码中直接运行就可以了

使用cookie操作scrapy

直接撸代码

<span style="color:#000000"><code>    <span style="color:#880000"># -*- coding: utf-8 -*-</span>
    <span style="color:#000088">import</span> scrapy
    <span style="color:#000088">from</span> scrapy.conf <span style="color:#000088">import</span> settings <span style="color:#880000">#从settings文件中导入Cookie,这里也可以室友from scrapy.conf import settings.COOKIE</span>

    <span style="color:#000088">class</span> <span style="color:#4f4f4f">DemoSpider</span><span style="color:#4f4f4f">(scrapy.Spider)</span>:
    name = <span style="color:#009900">"demo"</span>
    <span style="color:#880000">#allowed_domains = ["csdn.com"]</span>
    start_urls = [<span style="color:#009900">"http://write.blog.csdn.net/postlist"</span>]
    cookie = settings[<span style="color:#009900">'COOKIE'</span>]  <span style="color:#880000"># 带着Cookie向网页发请求\</span>
    headers = {
        <span style="color:#009900">'Connection'</span>: <span style="color:#009900">'keep - alive'</span>,  <span style="color:#880000"># 保持链接状态</span>
        <span style="color:#009900">'User-Agent'</span>: <span style="color:#009900">'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36'</span>
    }
    <span style="color:#000088">def</span> <span style="color:#009900">start_requests</span><span style="color:#4f4f4f">(self)</span>:
        <span style="color:#000088">yield</span> scrapy.Request(url=self.start_urls[<span style="color:#006666">0</span>],headers=self.headers,cookies=self.cookie)<span style="color:#880000"># 这里带着cookie发出请求</span>

    <span style="color:#000088">def</span> <span style="color:#009900">parse</span><span style="color:#4f4f4f">(self, response)</span>:
        <span style="color:#000088">print</span> response.body</code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

说明

这里是scrapy工程目录下spiders目录下的主要的解析网页的py文件相信学过scrapy的应该不会陌生,上述代码中的cookie值是放在Settings文件中的,因此使用的时候需要导入,当然你也可以直接将cookie粘贴到这个文件中

注意

虽说这里使用直接使用cookie可以省去很多麻烦,但是cookie的生命周期特别的短,不过小型的项目足够使用了,向那些需要爬两三天甚至几个月的项目就不适用了,因此在隔一段时间就要重新换cookie的值,虽说有很多麻烦,但是我还是比较喜欢这种方法的,因为可以省去不少脑筋

作者说

本人秉着方便他人的想法才开始写技术文章的,因为对于自学的人来说想要找到系统的学习教程很困难,这一点我深有体会,我也是在不断的摸索中才小有所成,如果你们觉得我写的不错就帮我推广一下,让更多的人看到。另外如果有什么错误的地方也要及时联系我,方便我改进,谢谢大家对我的支持。

最后欢迎大家看看我的其他scrapy文章

猜你喜欢

转载自blog.csdn.net/lq497028254/article/details/81604618