【问题标题】:XPATH Concatenation of two or many subclassXPATH 连接两个或多个子类
【发布时间】:2017-08-22 21:47:01
【问题描述】:
我需要废弃网站上的数据。
例如,www.example.com
代码展示:
<div class="first test">
<div class="first test2">
<ul>
<li class="datas">One One</li>
<li class="datas1">One Two</li>
<li class="datas2">One Three</li>
</ul>
</div>
</div>
<div class="second test">
<div class="second test2">
<ul>
<li class="datas">Two One</li>
<li class="datas1">Two Two</li>
<li class="datas2">Two Three</li>
</ul>
</div>
</div>
当我设置时,我需要获取文本“One One”
.//*[@class='first test' and @class='first test2' and @class='datas'] 不行!
为什么?请。
【问题讨论】:
标签:
xml
xpath
web-scraping
【解决方案1】:
您的 XPath 不起作用,因为您在单个元素(用 * 选择)上只有一个 predicate ([ ])。
试试这样吧……
//div[@class='first test']/div[@class='first test2']/ul/li[@class='datas']/text()
【解决方案2】:
它不起作用,因为每个类都针对不同的元素。试试这样的:
//div[@class='first test2']//li[@class='datas']
上面的代码现在应该可以解决了,但是如果有人添加了一个带有“datas”类的新li元素,你就会遇到一个新问题。如果是这样,您必须再添加一个规范:
//div[@class='first test2']//li[@class='datas'][text()='one one']
此 XPath 在两种情况下都适用
【解决方案3】:
您可以尝试下面提到的xpath 中的任何一个来定位网络元素One One
使用preceding keyword获取webelement
//div[@class='second test']/..//preceding::div[@class='first test2']//li[text()='One One']
或
使用following-sibling keyword获取webelement
//div[@class='first test2']/..//following-sibling::li[text()='One One']