如何使用XPATH解析HTML列表?

时间:2015-02-19 12:28:12

标签: html xpath scrapy

我想抓一些网页。我正在使用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位数字?

非常感谢。

祝你好运, 儒略

1 个答案:

答案 0 :(得分:1)

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

1.-长度为string-length()的功能 2.-它是一个用number()函数转换并进行比较的数字。它不符合布尔值,因为false0true1,而字符串也不是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]