python爬蟲之spider用法

Spider類定義瞭如何爬取某個網站, 包括爬取的動做以及如何從網頁內容中提取結構化的數據, 總的來講spider就是定義爬取的動做以及分析某個網頁.css

 

工做流程分析 :dom

  1. 以初始的URLRequest, 並設置回調函數, 當該requeset下載完畢並返回時, 將生成response, 並做爲參數傳遞給回調函數. spider中初始的request是經過start_requests()來獲取的. start_requests()獲取start_urls中的URL, 並以parse以回調函數生成Requestscrapy

  2. 在回調函數內分析返回的網頁內容, 能夠返回item對象, 或者Dict,或者Request, 以及是一個包含三者的可迭代的容器, 返回的Request對象以後會通過Scrapy處理, 下載相應的內容, 並調用設置的callback函數.ide

  3. 在回調函數, 能夠經過lxml, bs4, xpath, css等方法獲取咱們想要的內容生成item函數

  4. 最後將item傳送給pipeline處理源碼分析

源碼分析 :post

  在spiders下寫爬蟲的時候, 並無寫start_request來處理start_urls處理start_urls中的url, 這是由於在繼承的scrapy.Spider中已經寫過了網站

  在上述源碼中能夠看出在父類裏實現了start_requests方法, 經過make_requests_from_url作了Request請求url

  上圖中, parse回調函數中的response就是父類中start_requests方法調用make_requests_from_url返回的結果, 而且在parse回調函數中能夠繼續返回Request, 就像代碼中yield request()並設置回調函數.xml

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的可迭代對象.

相關文章
相關標籤/搜索