lxml.html通过搜索关键字来提取字符串

时间:2012-12-22 16:44:48

标签: python lxml

我有一部分html如下

<li><label>The Keyword:</label><span><a href="../../..">The text</a></span></li>

我想获得字符串“The keyword:The text”。

我知道我可以使用Chrome inspect或FF firebug获取上面html的xpath,然后选择(xpath).extract(),然后删除html标签以获取字符串。但是,由于xpath在不同页面之间不一致,因此该方法不够通用。

因此,我正在考虑以下方法: 首先,搜索“关键字:”使用(代码用于scrapy HtmlXPathSelector,因为我不知道如何在lxml.html中做同样的事情)

hxs = HtmlXPathSelector(response)
hxs.select('//*[contains(text(), "The Keyword:")]')

什么时候pprint我得到一些回报:

>>> pprint( hxs.select('//*[contains(text(), "The Keyword:")]') )
<HtmlXPathSelector xpath='//*[contains(text(), "The Keyword:")]' data=u'<label>The Keyword:</label>'>

我的问题是如何获取想要的字符串:“关键字:文本”。我正在考虑如何确定xpath,如果xpath已知,那么当然我可以得到想要的字符串。

我对lxml.html以外的任何解决方案都持开放态度。

感谢。

2 个答案:

答案 0 :(得分:2)

from lxml import html

s = '<li><label>The Keyword:</label><span><a href="../../..">The text</a></span></li>'

tree = html.fromstring(s)
text = tree.text_content()
print text

答案 1 :(得分:1)

您可以稍微修改XPath以使用当前结构 - 获取标签的父级,然后查找第一个a元素,并从中获取文本...

>>> tree.xpath('//*[contains(text(), "The Keyword:")]/..//a/text()')
['The text']

但这可能不够灵活......