【问题标题】:Attribute slicing using XPATH?使用 XPATH 进行属性切片?
【发布时间】:2016-03-02 19:36:51
【问题描述】:

假设我们有以下 html sn-p:

...
<section>
    <a href="https://example.com" data-utag="{"sku":"12340", "abc":"Lorem ipsum"}">sometext</a>
</section>
...

使用 XPATH,如何从 data-utag 中仅提取 SKU 值(即 12340)?

【问题讨论】:

  • 我很确定你不能。由于 " 的滥用,该 sn-p 不是格式良好的 XML 文档的一部分。
  • 如果所有这些值都是这样的,您可以通过node.attrib["data-utag"]访问整个值,并使用eval(value)将其作为Python字典读取。或者你可以做一些快速而肮脏的字符串拆分。
  • 忽略引用问题,您可以使用正则表达式与 xpath (see)[regular-expressions.mobi/xpath.html],所以也许。这要看数据格式是否。这个确切的字符串,当然,但如果它类似于 python 字典的字符串表示,那么通常它需要一个解析器。
  • 我没有提出结构,但 SKU 对我来说是有价值的数据。此示例取自市场之一。他们使用包含字典的 data-utag。

标签: python xml xpath scrapy


【解决方案1】:

在 html 的标签中使用单引号而不是双引号将使 parsel/scrapy 脚本工作:

from parsel import selector
import json

sel = selector.Selector(text=u"""<section><a href='https://example.com' data-utag='{"sku":"12340", "abc":"Lorem ipsum"}'>sometext</a></section>""")

jsontxt = sel.xpath("string(.//section/a/@data-utag)").extract()[0]

loaded = json.loads(jsontxt)

print(loaded["sku"])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2011-10-20
    • 1970-01-01
    • 2021-12-27
    • 2010-09-20
    • 2023-03-06
    相关资源
    最近更新 更多