如何使用 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()
函数转换和比较的数字。它不会匹配布尔值,因为 false
是 0
而 true
是 1
,也不匹配字符串,因为它们将是 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]
我想抓取一些网页。我正在为此使用 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()
函数转换和比较的数字。它不会匹配布尔值,因为 false
是 0
而 true
是 1
,也不匹配字符串,因为它们将是 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]