python - 在 Scrapy 中使用规范化空间

标签 python parsing xpath web-scraping scrapy

下面是我正在处理的文档的模型:

<div>
<h4>Area</h4>
  <span class="aclass"> </span>
  <span class="bclass">
        <strong>Address:</strong>
  10 Downing Street

  London

  SW1
  </span>
</div>

我得到这样的地址:

response.xpath(u".//h4[. = 'Area']/following-sibling::span[contains(.,'Address:')]/text()").extract()

返回

[u'\r\n  \t', u'\r\n  10 Downing Street\r\n\r\n  London     \r\n  \r\n  SW1\r\n  ']

我正在尝试使用 normalize-space 清理它。我已经尝试将它放在我能想到的每个位置,但它要么告诉我存在语法错误,要么返回一个空字符串。

更新 以添加我试图在不过多更改选择器的情况下使其正常工作。我有类似的情况,但没有 <strong>标签,例如。在我在这里准备的示例中,选择器过于复杂,但在实际版本中,我必须采取相当复杂的路线才能到达地址。

关于可能的重复 按照可能重复的建议,我添加了 /normalize-space(.)给这个:

(u".//h4[. = 'Area']/following-sibling::span[contains(.,'Address:')]/text()/normalize-space(.)").extract()

产生 ValueError: Invalid XPath:错误。

最佳答案

您可以找到 strong 元素,获取以下文本兄弟 并将其规范化:

In [1]: response.xpath(u"normalize-space(.//strong[. = 'Address:']/following-sibling::text())").extract()
Out[1]: [u'10 Downing Street London SW1']

或者,您可以查看 Item Loaders以及输入和输出处理器。我经常用 Join() , TakeFirst()MapCompose(unicode.strip)用于清理从额外的换行符或空格中提取的数据。

关于python - 在 Scrapy 中使用规范化空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33904058/

相关文章:

python - 如何实现请求的多线程或多处理

php - 我无法使用 GAE 在 Windows 上以本地模式运行 WordPress

python - BeautifulSoup 未解析完整的 HTML - 这是因为动态 HTML 吗?

java - 使用 xpath 从 xml 中提取所有标签

python - 以表格格式写入 csv 文件

python - 无法抓取《华尔街日报》页面上 "div"类中的数据

c# - 解析以逗号分隔的键值对

html - 使用 SED/AWK/GREP 从 html 中提取 href/url

c# - 为什么 .NET XPath 不像 [position() le 10001]

xpath - Css 选择器等效于 '//div[contains(@class, ' a b') 而不是 (contains(@style, 'c' ))]'