python scrapy的一點雜談

來源:互聯網
上載者:User

標籤:

這幾天為了做課程設計,想起之前學過python,所以想起要去做個爬蟲,於是用上了scrapy架構,當然在這期間也瞭解了一下requests,但是還是沒有scrapy方便,畢竟它沒有處理cookie的機制,需要自己去手動處理,比較麻煩,下面我來先稍微講講自己對scrapy運行原理的理解:

我們可以看到這是scrapy的大致結構,scrapy的運行流程:

1.scrapy engine開啟一個domain,並根據domain找到對應的處理這個domain的spider(spider中介軟體重要作用是為request要求標頭中加入refer,根據對應的response的url)

2.spider處理這個url並返回request,scrapy engine將request放到調度器

3.engine向調度器請求下一個url

4.調度器將這個request傳到下載中間鍵(處理cookies,認證,user-agent),然後下載器會去下載這個request的內容,並將對應的response返回到Spider

5.Spider再根據response產生出item或者request,並將它傳到itempipeline或者調度器中

6.從2步開始重複直到沒有request


在這裡加入一個插曲,Spider中介軟體會對Spider發出的request進行檢查,只有滿足allow_domain才會被允許發出,這裡還有我自己的一個疑惑:scrapy中有一個linkExtractor,我的理解是當它會對response的url進行解析,如果符合,則會送去回調方法,但是這樣的話就有一個疑惑,當你用Request方法建立一個request,同樣可以設定一個callback,那麼此時這個response究竟是被送去哪一個callback去處理呢?還是都被處理呢?(都的話感覺不太合適吧?還是有優先順序?)


scrapy最重要的一點就是它能自動處理cookie,但是我們可以從官方文檔看到一個比較奇怪的地方,

for i, url in enumerate(urls):    yield scrapy.Request("http://www.example.com", meta={'cookiejar': i},        callback=self.parse_page)

我在這裡的理解是當我們單個spider中每次只有一個request時候,因為預設是使用一個cookiejar來處理,所以我們在發出request的時候,不需要手動使用meta來給它布置cookiejar,但是當單個spider多個request的時候,因為返回的每個response要求下一個request帶的cookie都不同,所以每一次都要手動給每個request添加cookiejar來記錄


這裡順便說下,我們使用爬蟲類比瀏覽器去訪問,其實主要是帶有cookie和要求標頭中的refer和user-agent資訊,由於scrapy幫我們處理好了這些,所以使我們能夠更專註於商務邏輯,這是非常有趣的,以後有空一定要取看看源碼


再淺談下session和cookie的區別

session和cookie都是一種保持http串連的方式,session是將資訊儲存在伺服器端,cookie是儲存在用戶端

在不禁用cookie的情況下,當用戶端第一次發送請求到伺服器端的時候,伺服器端會產生一個session_id,然後將它設定在響應報文的setcookie選項中,當用戶端收到之後,知道下一次發送請求報文要加上這個cookie,當下一次發送的時候,伺服器會根據這個session_id找到對應的session(由tomcat自行處理),如果禁用了cookie,那麼一般則會採取放在url後面或者使用input hidden的形式傳入session_id


用戶端每次發送cookie的時候,都會在本地搜尋有效範圍大於這次請求資源的cookie,然後加在request中的cookie裡面,發送出去,這裡必須注意的是response其實是沒有cookie這個選項的,所以我們看響應報文頭也是沒有cookie選項的,它只有一個setcookie選項告訴下一次發送的請求應該有什麼樣的cookie而已


願各位能有所收穫,順便求大神解救下我的疑惑~

最後附上我的github裡面用scrapy建立的小項目 https://github.com/yue060904/Spider

python scrapy的一點雜談

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.