我正在解析与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页面上所有数字旁边显示的链接
我该如何解决这个问题?
答案 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