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中已經寫過了

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

  上圖中, 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的可迭代對象.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM