【问题标题】:Scrapy: How to do I prevent a yield request with a conditional item value?Scrapy:如何防止带有条​​件项目值的收益请求?
【发布时间】:2016-05-11 23:39:49
【问题描述】:

我正在解析一个 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

现在我希望如果 item['parameterA'] 遵循条件,则不需要“yield request”(因此不会保存此 url)。我尝试添加一个条件,如:

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

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

【问题讨论】:

  • 等等,但获得parameterA 的唯一方法是发出请求?
  • 是的,因为我必须“查看”该网址下的内容,然后决定是否保存。

标签: python web-scraping scrapy scrapy-spider


【解决方案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 周围的引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 2016-12-25
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多