选择之前的所有文字

时间:2014-07-30 14:22:16

标签: html xpath

我有以下糟糕的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捕获每个</a>之后的所有文本,所以:

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]

帮助?

3 个答案:

答案 0 :(得分:1)

你去吧,朋友:

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

答案 1 :(得分:0)

到目前为止,我发现的最好的事情就是简单地核错错误的<em>节点。

所以:

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

答案 2 :(得分:-2)

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

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

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