Scrapy:如何使用条件项值阻止yield请求?

时间:2016-05-11 15:28:58

标签: python web-scraping scrapy scrapy-spider

我正在解析网址列表,我希望避免在某些网站上保存一些网址结果项。我的代码是这样的:

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']遵循一个条件,则不需要"产生请求" (这样就不会保存此URL)。我尝试添加条件,如:

    if item['parameterA'] == 0:
       continue
    else:
       yield item

但正如预期的那样它不起作用,因为scrapy甚至在执行请求之前就会继续循环。

1 个答案:

答案 0 :(得分:1)

根据我的理解,您应该在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周围的引号。