使用标签中的文本来选取元素,是xpath中屡试不爽的技巧,通过我们处理的这种标签的内层都会包含文字,举个例子:
<div>优快云</div>
可以用//div[contains(string(), "优快云")]
或者//div[contains(text(), "优快云")]
来选取。
但如果遇到形似<input>
这类没有结束标签的时候,上面的方法就不适用了,例如以下:
<div>
<span>请选择语言:</span>
<input type="radio" name="A" value="A">
python
<input type="radio" name="B" value="B">
Java
<input type="radio" name="C" value="C">
C++
</div>
上面的例子最简单的方式就是数一下想要获取的文本在第几个元素,然后//div/text()[1]
索引取值。
虽然确实可以取到,但这太局限了,在一个爬虫项目中这么做是在给自己挖坑,因为对方网站一旦变动,你就得重新查一遍这里的选项
我们可以使用更高级的方法,
比方说我们需要获得python这个文本,就可以//input[@name="A"]/following-sibling::text()[1]
或者获取这个python文本上方的标签(假设该标签特征不明显时)://text()[contains(string(), "python")]/preceding-sibling::input[1]
以上
参考文章:
定位元素的父(parent::)、兄弟(following-sibling::、preceding-sibling::)节点