Scrapy:如何防止带有条件项值的收益请求?
Scrapy: How to do I prevent a yield request with a conditional item value?
我正在解析 url 的列表,并且我想避免保存某些 url 结果项的某些值。我的代码是这样的:
start_urls = [www.rootpage.com]
def parse(self,response):
item = CreatedItem()
url_list = response.xpath('somepath').extract()
for url in url_list:
request = scrapy.Request(item['url'],callback=self.parse_article)
request.meta['item'] = item
yield request
def parse_article(self,response):
item = response.meta['item']
item['parameterA'] = response.xpath('somepath').extract()
yield item
现在我希望,如果项目 ['parameterA'] 符合条件,则不需要 "yield request"(这样就不会为此 url 进行保存)。我尝试添加一个条件,如:
if item['parameterA'] == 0:
continue
else:
yield item
但正如预期的那样它不起作用,因为 scrapy 甚至在执行请求之前就继续循环。
据我了解,您应该在 parse_article
方法中做出决定:
def parse_article(self,response):
item = response.meta['item']
item['parameterA'] = response.xpath('somepath').extract_first()
if item['parameterA'] != "0":
yield item
请注意 extract_first()
的使用以及 0
周围的引号。
我正在解析 url 的列表,并且我想避免保存某些 url 结果项的某些值。我的代码是这样的:
start_urls = [www.rootpage.com]
def parse(self,response):
item = CreatedItem()
url_list = response.xpath('somepath').extract()
for url in url_list:
request = scrapy.Request(item['url'],callback=self.parse_article)
request.meta['item'] = item
yield request
def parse_article(self,response):
item = response.meta['item']
item['parameterA'] = response.xpath('somepath').extract()
yield item
现在我希望,如果项目 ['parameterA'] 符合条件,则不需要 "yield request"(这样就不会为此 url 进行保存)。我尝试添加一个条件,如:
if item['parameterA'] == 0:
continue
else:
yield item
但正如预期的那样它不起作用,因为 scrapy 甚至在执行请求之前就继续循环。
据我了解,您应该在 parse_article
方法中做出决定:
def parse_article(self,response):
item = response.meta['item']
item['parameterA'] = response.xpath('somepath').extract_first()
if item['parameterA'] != "0":
yield item
请注意 extract_first()
的使用以及 0
周围的引号。