XPath follow-sibling用于爬行而不返回兄弟

时间:2015-06-05 18:46:53

标签: xpath crawler4j import.io

我正在尝试创建一个抓取工具,从供应商网站中提取一些我可以针对内部属性数据库进行审核的属性数据,并且是import.io的新手。我观看了一堆视频,但虽然我的语法似乎是正确的,但我的手动xpath覆盖不会返回属性值。我有以下示例HTML代码:

<table>
<tbody><tr class="oddRow">
<td class="label">&nbsp;Adhesive Type&lrm;</td><td>&nbsp;Epoxy&lrm;
</td>
</tr>
<tr>
<td class="label">&nbsp;Applications&lrm;</td><td>&nbsp;Hard Disk Drive Component Assembly&lrm;
</td>
</tr>
<tr class="oddRow">
<td class="label">&nbsp;Brand&lrm;</td><td>&nbsp;Scotch-Weld&lrm;
</td>
</tr>
<tr>
<td class="label">&nbsp;Capabilities&lrm;</td><td>&nbsp;Sustainability&lrm;
</td>
</tr>
<tr class="oddRow">
<td class="label">&nbsp;Color&lrm;</td><td>&nbsp;Clear Amber&lrm;
</td>

我正在尝试在sibling语句之后编写一个xpath来通过import.io爬虫抓取“Color”。选择“Color”时的xpath代码是:

//*[@id="attributeList"]/table/tbody/tr[5]/td[1]

我试过用:

//*[@id="attributeList"]/table/tbody/tr/td[.="Color"]/following-sibling::td

但它并没有从表中获取颜色属性值。我不确定它是否与奇数和偶数行类有关?当我看到HTML时,它似乎具有逻辑意义; color是“Color”,属性值位于以下td括号中。

1 个答案:

答案 0 :(得分:7)

所选td节点中的文字不仅仅包含"Color"。它是&nbsp;Color&lrm;。因此,您可以选择td个文本为contains字符串"Color"的{​​{1}}个节点:

'//*[@id="attributeList"]/table/tbody/tr/td[contains(text(), "Color")]/following-sibling::td/text()'