我想抓一些网页。我正在使用scrapy。一切正常,但我想“找到”包含数字的字段,有时候是列表中的第二个,第三个或第四个“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。
目前我正在找到这张桌子:
//*[@id="book-info"]/ul/li[x]/span[2]
我正在解析所有'li'(1,2,3,4,5),然后我得到一个CSV,我必须手工编辑,因为我只需要ISBN - 而不是其他东西。
有没有办法自动生成这个?也许我可以告诉XPATH搜索13位数字?
非常感谢。
祝你好运, 儒略
答案 0 :(得分:1)
您可以使用隐式and
,在方括号之间连接表达式,并检查:
1.-长度为string-length()
的功能
2.-它是一个用number()
函数转换并进行比较的数字。它不符合布尔值,因为false
为0
而true
为1
,而字符串也不是NaN
,与NaN
不同1}},请尝试:
//ul/li/span[2][number(text()) = number(text())][string-length() = 13]
更新:要在评论中提出新要求,最简单的方法是使用|
中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]