python - 使用 ItemLoader 但在 Scrapy 中添加 XPath、值等

标签 python xpath web-scraping scrapy

目前我正在使用 XPathItemLoader 来抓取数据:

def parse_product(self, response):
    items = []
    l = XPathItemLoader(item=MyItem(), response=response)
    l.default_input_processor = MapCompose(lambda v: v.split(), replace_escape_chars)
    l.default_output_processor = Join()
    l.add_xpath('name', 'div[2]/header/h1/text()')
    items.append(l.load_item())
    return items

并且需要 v.split() 来删除一些空格 - 这工作正常。

但是我现在如何添加时间呢?

l.add_value('time', time())

只会导致错误:

exceptions.AttributeError: 'float' object has no attribute 'split'

最佳答案

这是因为您正在设置默认输入和输出处理器,该处理器适用于所有项目字段,包括时间,它是一个浮点

您有多种选择:

  • 使用特定于字段的处理器而不是默认处理器:

    l.name_in = MapCompose(lambda v: v.split(), replace_escape_chars)
    l.name_out = Join()
    
  • 将时间转换/格式化为字符串:

    l.add_value('time', str(time()))
    
  • 保留默认处理器不变并配置Identity输入和输出处理器:

    l.time_in = Identity()
    l.time_out = Identity()
    

关于python - 使用 ItemLoader 但在 Scrapy 中添加 XPath、值等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30140574/

相关文章:

python - 使用 XPath 在使用 python 的 <td> 单元格中获取文本

javascript - Google 搜索页面 "next"跨度与 selenium-webdriver 和 nodejs

xml - 使用 xslt 复制包含特定子元素的父元素

python - 使用 Python 从 URL 返回数据

matlab - webread给出的结果与网页的 'View Page Source'不同

python - 在 OSX 上安装 Python 模块/脚本

python - 许多小请求与少量大请求 - Angular 到 Django REST API - 不涉及数据库

python - 如何在python中提取特定频率的峰值

python - 将数据框中的用户(重复多行)和项目转换为标签二值化数据框

python - 无法从某些盒状容器中获取标题