【问题标题】:Replace empty fields with 0 in scrapy script在scrapy脚本中用0替换空字段
【发布时间】:2020-03-17 20:04:19
【问题描述】:

我正在编辑一个旧的 scrapy 脚本。对于某些页面,“浴室”字段不存在。如果不存在,我想输入一个“0”。

我可以使用 pandas 发布流程,但现在我想在 scrapy 脚本中实现这一点。

我试试这个,但是出错了..

town.py",第 88 行 别的: ^ SyntaxError: 无效语法

bathrooms_txt = response.xpath(".//dt[contains(text(), 'Bathrooms')]/following-sibling::dd/text()").extract_first()
if bathrooms_txt == "":
    bathrooms = "0"
    else:
        bathrooms = bathrooms_txt
    except:
        pass

【问题讨论】:

  • 缩进关闭。 elseexcept 块需要在 if-block 级别
  • 另外,if 语句不支持 except 块。

标签: python web-scraping scrapy screen-scraping


【解决方案1】:

看起来你可能弄乱了你的 try 语句。

你的意思是说:

bathrooms_txt = response.xpath(".//dt[contains(text(), 'Bathrooms')]/following-sibling::dd/text()").extract_first()
try:
    if bathrooms_txt == "":
       bathrooms = "0"
    else:
       bathrooms = bathrooms_txt
except:
   pass

【讨论】:

  • 我尝试了您的建议,没有收到任何错误,但是“if”语句无法正常工作。 "else:" 语句确实工作正常。
  • 澄清一下,我正在查找房屋出售数据。当我刮地待售时,没有“浴室”数据。所以我需要在那个地方放一个0。目前脚本将其留空。抱歉,我对此不太满意。
  • 如果 else-statement 正常工作,我会检查 bathes_txt 实际输出的内容。尝试打印它的值并检查它的类型 (type(bathrooms_txt))。它可能不是一个空字符串。尝试检查它的长度(len(bathrooms_txt))是否为空字符串
  • 我的意思是,您可能正在检查 if 语句中的错误内容(即不是 ""
【解决方案2】:

编辑 piplines.py

 def process_item(self, item, spider):
     if item.get('bathrooms_txt') is none:
         item['bathrooms_txt'] = "0"

【讨论】:

    【解决方案3】:

    extract_first 方法有 default 参数,您可以在这种情况下使用:

    value = response.xpath("selector").extract_first(default="0")
    

    或:

    value = response.xpath("selector").extract_first("0")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 2021-04-19
      相关资源
      最近更新 更多