【问题标题】:Select all text before <br>选择 <br> 之前的所有文本
【发布时间】:2014-07-30 14:22:15
【问题描述】:

我有以下糟糕的 HTML:

<p>
    <a href="102036.pdf">102036</a> - <em>In re</em> State v. Williams <a href="#">video</a><br>
    <a href="104236.pdf">104236</a> - University of Kansas Hosp. Auth. v. Board of Wabaunsee County Comm'rs <a href="#">video</a>
</p>

我想使用 XPath 来捕获每个 &lt;/a&gt; 之后的所有文本,所以:

Item 1: " - In re State v. Williams
Item 2: " - University of Kansas Hosp. Auth. v. Board of Wabunsee County

或者,我可以捕获所有文本,这也可以:

Item 1: "102036 - In re State v. Williams
Item 2: "104236 - University of Kansas Hosp. Auth. v. Board of Wabunsee County

我已经尝试了一段时间,但没有任何进展。我想要类似的东西:

/a/following::text()[before::br]

帮助?

【问题讨论】:

  • jquery 解决了?
  • @MaurizioBattaghini,这不是浏览器端,我需要用 xpath 和 lxml 来做。唉,Jquery 不是我工具包中的工具。
  • 我的错,抱歉帮不了你

标签: html xpath


【解决方案1】:

给你,朋友:

//a//following-sibling::text() | //a//following-sibling::*[not(self::a)]/text()

【讨论】:

  • 嗯,这很接近,但有三个结果。请参阅我正在使用的修复程序的答案。
【解决方案2】:

到目前为止,我发现的最好的事情就是简单地核对错误的&lt;em&gt; 节点。

所以:

elem = html.xpath('//p')[0]
etree.strip_tags(elem, 'em')

然后,使用更简洁的 html,可以使用简单的 XPath:

texts = [e.tail for e in elem.xpath('//a')]

信用到期:https://stackoverflow.com/a/8788559/64911

【讨论】:

    【解决方案3】:

    如果您安装了 firebug 并且正在运行 Firefox,那么对于这个和所有未来的 xpath 需求,您可以按照本教程进行操作:

    http://www.wikihow.com/Find-XPath-Using-Firebug

    查找页面上任何内容的 xpath 的非常简单的方法。

    【讨论】:

    • 但这可能不够灵活,需要将许多 XPath 表达式链接在一起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多