我有一部分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以外的任何解决方案都持开放态度。
感谢。
答案 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']
但这可能不够灵活......