【问题标题】: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']
        

        【讨论】:

        • 如果对您有用,请将此答案标记为Accepted
        猜你喜欢
        • 2021-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多