2016-08-05 64 views

回答

1

我不確定在這裏我是否正確理解你,但看起來你很困惑LinkExtractorCrawlSpider.rules。 LinkExtractor只是一個從響應中提取鏈接的對象,其中rules屬性描述了CrawlSpider的爬行規則。

如果你想使用CrawlSpider而手動提取自己的一些鏈接,你可以做到這一點簡單:

from scrapy.linkextractors import LinkExtractor 
from scrapy.spiders import CrawlSpider 
class MySpider(CrawlSpider): 
    name = 'myspider' 
    le = LinkExtractor() 
    rules = [Rule(le, callback='parse_page')...] 

    def parse_page(self, response): 
     items = #parse items 
     for item in items: 
      yield item 
     ajax_url = #find ajax url for next page or something 
     if ajax_url: 
      yield Request(ajax_url, self.parse_ajax) 

    def parse_ajax(self, response): 
     links = self.le.extract_links(response) 
     for link in links: 
      yield Request(link.url, self.parse_page) 
+0

不文檔說,'parse'功能不能與'CrawlSpider'使用嗎?我的意思是'CrawlSpider.rules'中使用的'LinkExtractor'。 – XO39

+0

對,''parse'是CrawlSpider的保留名。我最初使用scrapy.Spider寫了這個例子,只是忘了改變它。現在查看我的編輯。關於linkextractor,這裏有什麼問題?你創建一個鏈接提取器並將其添加到你的規則中,稍後使用它來提取parse_ajax()中的一些鏈接 - 它是相同的鏈接提取器。 – Granitosaurus

+0

不,不,請[see here](http://stackoverflow.com/q/38777236/587990)瞭解我的問題是什麼。我會給你的代碼一槍。 – XO39

相關問題