1. 程式人生 > >Scrapy中使用cookie免於驗證登入和模擬登入

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文章