Scrapy,将start_url绑定到特定的解析项,以便可以一个接一个地解析它们

时间:2016-05-19 20:44:27

标签: python scrapy

您好!我遇到了一些问题,我试图弄清楚如何在crawlspider类中为特定的parse_item方法设置一个启动URL。

我们说我有多个起始网址,为了简单起见,有两个。

所以:start_urls = [" www.website1.com"," www.website2.com"]

现在让我说我有两个名为parse_item1和parse_item2的解析函数。

我已经将parse_item1设置为parse_item2上的回调,反之亦然。

所以他们确实按照彼此的顺序运行。

现在我遇到了一些问题,我希望一个接一个地遍历每个start_url。

如下所示:example1,example2,example1,example2。 不:example1,example1,example2,example2,example2,example1。

我以为我会使用两个parse_item函数来执行此操作但现在我遇到了问题。

即使他们仍然按顺序互相呼叫,他们也不会按顺序调用每个启动网址。

所以我的问题是,它是否可能,如果它是如何绑定例如www.example1.com到parse_item1 和www.example2.com到parse_item2,所以他们一个接一个地被调用。

class juggler(CrawlSpider):

name = "juggle"
allowed_domains = ["example1.com","example2.com"]
start_urls = ["http://www.example1.com/","http://www.example2.com/"]
rules = [
    Rule(LinkExtractor(),callback="parse_all",follow=False)
    ]



def parse_all(self,response):
    yield self.parse_item1(response) 
    yield self.parse_item2(response)

def parse_item1(self,response):
    time.sleep(1)
    item = TwolaircrawlerItem()
    print "Item 1!"
    link = response.url
    print link
    return Request(url=link,callback="self.parse_item2")


def parse_item2(self,response):
    time.sleep(1)
    item = TwolaircrawlerItem()
    print "Item 2!"
    link = response.url
    print link
    return Request(url=link,callback="self.parse_item1")

1 个答案:

答案 0 :(得分:2)

默认情况下无保证订单,这就是Scrapy的工作方式。

如果您需要按严格的顺序逐个处理请求,则需要手动维护请求队列,如下所示: