在Scrapy中从同一方法创建多个请求

时间:2014-03-29 11:54:59

标签: python web-scraping scrapy

我正在解析与this页面具有类似结构的网页。

我有以下两个功能:

def parse_next(self, response):
    #  implementation goes here
    #  create Request(the_next_link, callback=parse_next)
    #  for link in discovered_links:
    #      create Request(link, callback=parse_link)


def parse_link(self, response):
    pass

我希望parse_next()在网页上创建* Next 链接的请求。同时,我希望它使用parse_link()作为回调来创建对当前页面上发现的所有URL的请求。请注意,我希望parse_next以递归方式将自身用作回调,因为在我看来这是生成所有* Next 链接请求的唯一可能方式。

* 下一个:this页面上所有数字旁边显示的链接

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

使用生成器函数并循环 您的链接,然后在链接上调用此链接 您想要发出请求:

    for link in links:
      yield Request(link.url)  

由于您正在使用scrapy,我假设您已设置链接提取器。 因此,只需将链接提取器声明为变量,如下所示:

    link_extractor = SgmlLinkExtractor(allow=('.+'))

然后在parse函数中,调用'the_next_link'上的链接提取器:

    links = self.link_extractor.extract_links(response)

你走了:

http://www.jeffknupp.com/blog/2013/04/07/improve-your-python-yield-and-generators-explained