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

0 投票
1 回答
1435 浏览
提问于 2025-04-18 00:25

我正在解析一些网页,这些网页的结构和这个页面很相似。

我有以下两个函数:

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()这个函数能够为网页上的*下一页链接创建一个请求。同时,我还希望它能为当前页面上所有通过parse_link()发现的链接创建请求。需要注意的是,我想让parse_next在调用自己时使用递归,因为我觉得这是生成所有*下一页链接请求的唯一方法。

*下一页:出现在这个页面上所有数字旁边的链接

我该如何解决这个问题呢?

1 个回答

1

使用生成器函数,然后遍历你的链接,接着对你想要请求的链接调用这个函数:

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

因为你在使用scrapy,我假设你已经设置好了链接提取器。 所以,只需像这样将你的链接提取器声明为一个变量:

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

然后在解析函数中,对“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

撰写回答