代码之家  ›  专栏  ›  技术社区  ›  Iain Samuel McLean Elder

选择不在段落中的文本的XPath表达式

  •  0
  • Iain Samuel McLean Elder  · 技术社区  · 14 年前

    我正在开发web scraping软件,它依赖于XPath从网页中提取信息。

    该软件的一个应用是从网站上搜集节目评论。我想找的一页是《卫报》最新的爱丁堡艺术节评论: http://www.guardian.co.uk/culture/edinburghfestival+tone/reviews

    我想要的部分在底部,标题是“最近”。查看项目列表(即pic、stars、date、blurb等)的XPath表达式是

    //ul[@id='auto-trail-block']
    

    如果我只想提到广告语,我最接近的方法就是说

    //ul[@id='auto-trail-block']/div[@class='trailtext']
    

    但是当我从列表的每一项中收集文本内容时,它包含了很多我不需要的Javascript和讨厌的东西。我不能引用blurb本身,因为它不在p元素中,而是在div元素中,div元素分别包含script元素和strong元素,后者分别包含javascript和不相关的文本。

    在调试器中,DOM如下所示:

    <ul id="auto-trail-block" ...>
      <li ...>
        <div ...>
        <div ...>
          <div ...>
          <div class="trailtext">
            <script ...>
            <div ...>
            <span ...>
            <strong .../>
            <br/>
            The Text I want to copy!
            <strong .../>
            <a .../>
            <div .../>
          </div>
        </div>
      </li>
      <li ...>
        ...
      </li>
      ...
    </ul>
    

    有没有办法只引用div中包含的文本内容而不引用它的任何子元素?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Oded    14 年前

    我的方法是选择 trailtext div,删除脚本标记及其内容和所有HTML标记。剩下的就是你想要的内容。

    只是想知道-它的内部文本节点是什么 //ul[@id='auto-trail-block']/div[@class='trailtext']

        2
  •  1
  •   Mads Hansen    14 年前

    如果您只需要 div[@class='trailtext']

    //ul[@id='auto-trail-block']//div[@class='trailtext']/text()