我想为start_urls
中的每个着陆网做一些特别的事情,然后蜘蛛跟随所有下一页并深入爬行。所以我的代码大致是这样的:
def init_parse(self, response):
item = MyItem()
# extract info from the landing url and populate item fields here...
yield self.newly_parse(response)
yield item
return
parse_start_url = init_parse
def newly_parse(self, response):
item = MyItem2()
newly_soup = BeautifulSoup(response.body)
# parse, return or yield items
return item
代码不会起作用,因为蜘蛛只允许返回项目,请求或无,但我会产生self.newly_parse
,那么我怎样才能在scrapy中实现这一点?
将init_parse
函数放在newly_parse中并在开头执行is_start_url
检查,如果response.url
在start_urls
内,我们将通过init_parse过程
将# parse, return or yield items
发生的代码分开并使其成为类方法或生成器,并在init_parse
和newly_parse
内调用此方法或生成器。
答案 0 :(得分:1)
如果您要在newly_parse
下生成多个项目,则init_parse
下的行应为:
for item in self.newly_parse(response):
yield item
因为self.newly_parse
将返回一个生成器,您需要先进行迭代,因为scrapy无法识别它。