天天看點

python爬蟲之spider用法

Spider類定義了如何爬取某個網站, 包括爬取的動作以及如何從網頁内容中提取結構化的資料, 總的來說spider就是定義爬取的動作以及分析某個網頁.

工作流程分析 :

  1. 以初始的URLRequest, 并設定回調函數, 當該requeset下載下傳完畢并傳回時, 将生成response, 并作為參數傳遞給回調函數. spider中初始的request是通過start_requests()來擷取的. start_requests()擷取start_urls中的URL, 并以parse以回調函數生成Request

  2. 在回調函數内分析傳回的網頁内容, 可以傳回item對象, 或者Dict,或者Request, 以及是一個包含三者的可疊代的容器, 傳回的Request對象之後會經過Scrapy處理, 下載下傳相應的内容, 并調用設定的callback函數.

  3. 在回調函數, 可以通過lxml, bs4, xpath, css等方法擷取我們想要的内容生成item

  4. 最後将item傳送給pipeline處理

源碼分析 :

  在spiders下寫爬蟲的時候, 并沒有寫start_request來處理start_urls處理start_urls中的url, 這是因為在繼承的scrapy.Spider中已經寫過了

python爬蟲之spider用法
python爬蟲之spider用法

  在上述源碼中可以看出在父類裡實作了start_requests方法, 通過make_requests_from_url做了Request請求

python爬蟲之spider用法

  上圖中, parse回調函數中的response就是父類中start_requests方法調用make_requests_from_url傳回的結果, 并且在parse回調函數中可以繼續傳回Request, 就像代碼中yield request()并設定回調函數.

spider内的一些常用屬性 :

  所有自己寫的爬蟲都是繼承于spider.Spider這個類

  name:

    定義爬蟲名字, 通過指令啟動的額時候用的就是這個名字, 這個名字必須唯一

  allowed_domains:

    包含了spider允許爬取的域名清單. 當offsiteMiddleware啟用時, 域名不在清單中URL不會被通路, 是以在爬蟲檔案中, 每次生成Request請求時都會進行和這裡的域名進行判斷.

  start_urls:

    其實的URL清單

    這裡會通過spider.Spider方法調用start_request循環請求這個清單中的每個位址

  custom_settings:

    自定義配置, 可以覆寫settings的配置, 主要用于當我們隊怕重有特定需求設定的時候

    設定的以字典的方式設定: custom_settings = {}

  from_crawler:

    一個類方法, 可以通過crawler.settings.get()這種方式擷取settings配置檔案中的資訊. 同時這個也可以在pipeline中使用

  start_requests():

    此方法必須傳回一個可疊代對象, 該對象包含了spider用于爬取的第一個Request請求

    此方法是在被繼承的父類中spider.Spider中寫的, 預設是通過get請求, 如果需要修改最開始的這個請求, 可以重寫這個方法, 如想通過post請求

  make_requests_from_url(url):

    此房也是在父類中start_requests調用的, 可以重寫

  parse(response):

    預設的回調函數

    負責處理response并傳回處理的資料以及跟進的url

    該方法以及其他的Request回調函數必須傳回一個而包含Request或者item的可疊代對象.

轉載于:https://www.cnblogs.com/dong-/p/10306046.html