如何使用 XPATH 解析 HTML 列表?

How to use XPATH for parsing HTML lists?

我想抓取一些网页。我正在为此使用 scrapy。一切正常,但我想要 'find' 一个包含数字的字段,有时是列表中的第二个、第三个或第四个 'li'。也许我可以向您展示网页上的代码:

<ul class="basic-product-information key-value-list">
        <li>
            <span class="key">Sprache:</span>
            <strong class="value">Unbekannt</strong>
        </li>
        <li>
            <span class="key">Plattform:</span>
            <span class="value">Bücher</span>
        </li>
        <li>
            <span class="key">EAN / ISBN:</span>
            <span class="value">9783442158126</span>
        </li>
</ul>

我想得到的值是 9783442158126。

目前我正在用这个定位 table:

//*[@id="book-info"]/ul/li[x]/span[2]

我正在解析所有 'li' (1, 2, 3, 4, 5),然后我得到一个 CSV,我必须手动编辑它,因为我只需要 ISBN - 而不是其他东西。

有没有办法自动执行此操作?也许我可以告诉 XPATH 搜索 13 位数字?

非常感谢。

此致, 朱利安

您可以使用和隐式 and,在方括号之间连接表达式,并检查:

1.- 具有 string-length() 函数的长度。
2.- 这是一个用number()函数转换和比较的数字。它不会匹配布尔值,因为 false0true1,也不匹配字符串,因为它们将是 NaN,这与 NaN,所以试试:

//ul/li/span[2][number(text()) = number(text())][string-length() = 13]

UPDATE:要实现评论中提出的新要求,最简单的方法是使用 or 条件翻译为 |xpath 中。要匹配最后一个 X,请使用 substring-before()string-length 的数字增加一:

//ul/li/span[2][number(text()) = number(text())][string-length() = 13] |
  //ul/li/span[2][number(substring-before(text(), "X")) = number(substring-before(text(), "X"))][string-length() = 14]