在Scrapy中从同一方法创建多个请求
我正在解析一些网页,这些网页的结构和这个页面很相似。
我有以下两个函数:
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