CrawlSpider

CrawlSpider類通過一些規則(rules),使對於鏈接(網頁)的爬取更具有通用性,換句話說CrawlSpider爬蟲是通用性爬蟲,那麼Spider爬蟲就更像是爲了一些特殊網站制定的爬蟲

 

創建一個工程:  

  scrapy startproject crawlspider

  scrapy genspider -t crawl CrawlSpider domain.com

  這裏面的-t crawl表示的是爬蟲的類,這樣我們就可以直接在spiders文件中找到這個爬蟲

class CrawlspiderSpider(CrawlSpider):
    name = 'CrawlSpider'
    allowed_domains = ['www.domin.com']
    start_urls = ['http://www.domin.com/']

    rules = (
        Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        i = {}
        #i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()
        #i['name'] = response.xpath('//div[@id="name"]').extract()
        #i['description'] = response.xpath('//div[@id="description"]').extract()
        return i  

 

  上面這段話是自動生成的一段代碼,這段代碼可以說是基本上對CrawlSpider爬蟲的結構有一個簡單的構造

  在這裏面我們可以看到有一個rules屬性,還有這個爬蟲繼承的類是CrawlSpider,這個就和之前繼承的Spider是有區別的,其中這裏面的這個rules屬性就是該整個爬蟲核心

  CrawlSpider使用rules屬性來決定爬蟲爬取的規則,並將匹配後的url請求提交給引擎,完成後續的爬取的工作

  rule屬性主要是由幾個Rule對象構成的,而這個Rule對象定義了提取鏈接等操作的規則

  Rule對象有六個屬性

    1. LinkExtractor:用於提取response中的鏈接
    2. callback:回調函數,對提取的鏈接使用,用於提取數據來填充item
    3. cd_kwargs:傳遞給回調函數的參數字典
    4. follow=True/False:對提取的鏈接是否需要跟進
    5. process_links:一個過濾鏈接的函數
    6. process_request:一個過濾鏈接Request的函數

    上面這些參數中除了LinkExtractor之外,其他的參數都是可選的,並且如果當callback的參數爲None的時候,我們就稱這個rules是一個跳板,也就是隻下載了頁面, 並沒有進行其他額外的操作,通常是用來作爲翻頁功能

 

LinkExtractior參數:是用來提取鏈接的,它有是個參數用來定義提取鏈接的規則

  1. allow:正則表達式字符串,提取response中符合這個正則表達式的鏈接
  2. deny:排除這個正則表達式鏈接之外的鏈接
  3. restrict_css:提取滿足這個css表達式的鏈接
  4. restrict_xpath:提取滿足這個xpath表達式的鏈接
  5. alllow_domins:允許的域名
  6. deny_domains:排除的域名
  7. tags:提取制定標籤的下的鏈接,默認會從a和area標籤下面提取鏈接
  8. attrs:提取滿足屬性的鏈接
  9. unique=True/False:鏈接是否要進行去重操作
  10. process_value:值處理函數,優先級要大於allow

  這上面的參數可以一起使用,以提取同時滿足條件的鏈接

 

follow參數:爲布爾值,用於是否跟進鏈接的處理,在當callback爲None的時候,默認是要跟進鏈接的,值爲True;當callback不爲空的時候,默認是False的,不跟進鏈接。我們要根據需要來進行賦值

  跟進和不跟進:就是你前面定義的規則對於已經提取的鏈接的頁面是不是在進行一次提取鏈接的操作

 

rules工作流程:

  這樣的,對於Rule提取的鏈接會自動調用parse函數,並返回這個鏈接的response,然後將這個鏈接的response給callback回調函數,通過回調函數的方式對這個item進行填充

在CrawlSpider中還有一個parse_start_url()方法,是用來解析start_urls中的鏈接頁面,這個方法一般用在有跳板的爬蟲中,用來對首頁的解析

 

ps:在編寫爬蟲規則的時候,避免使用parse作爲回調函數。由於CrawlSpider使用parse方法來實現其邏輯,如果要是覆蓋了parse方法,CrawlSpider將會運行失敗,follow=True將會匹配所有的鏈接,深度匹配;follow=False只會匹配當前頁

 

process_links:指定該spider中哪個的函數將會被調用,從link_extractor中獲取到鏈接列表的時候將會調用到這個函數。這個方法主要是用來過濾鏈接的,把錯誤的鏈接修改過來

process_request:指定該spider中哪個函數被調用,這個規則提取到每個request的時候都會調用這個函數。(用來過濾request)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章