2016-08-05 184 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