我如何获得一个HTML元素与Python LXML
问题描述:
有这样的html代码:我如何获得一个HTML元素与Python LXML
<table>
<tr>
<td class="test"><b><a href="">aaa</a></b></td>
<td class="test">bbb</td>
<td class="test">ccc</td>
<td class="test"><small>ddd</small></td>
</tr>
<tr>
<td class="test"><b><a href="">eee</a></b></td>
<td class="test">fff</td>
<td class="test">ggg</td>
<td class="test"><small>hhh</small></td>
</tr>
</table>
我用这个Python代码与LXML模块提取所有<td class="test">
。
import urllib2
import lxml.html
code = urllib.urlopen("http://www.example.com/page.html").read()
html = lxml.html.fromstring(code)
result = html.xpath('//td[@class="test"][position() = 1 or position() = 4]')
它很好用!其结果是:
<td class="test"><b><a href="">aaa</a></b></td>
<td class="test"><small>ddd</small></td>
<td class="test"><b><a href="">eee</a></b></td>
<td class="test"><small>hhh</small></td>
(因此第一和的每个<tr>
第四列) 现在,我来提取:
AAA(链接的标题)
ddd(
<small>
标签之间的文本)EEE(链接的标题)
HHH(
<small>
标签之间的文本)
我怎么能提取这些价值?
(问题是,我不得不删除<b>
标签,并获得锚标题上第一列和第四列删除<small>
标签)
谢谢!
答
为什么不直接在每一步获取你想要的东西?
links = [el.text for el in html.xpath('//td[@class="test"][position() = 1]/b/a')]
smalls = [el.text for el in html.xpath('//td[@class="test"][position() = 4]/small')]
print zip(links, smalls)
# => [('aaa', 'ddd'), ('eee', 'hhh')]
答
如果你这样做el.text_content()
,你会从每个元素去除所有标签的东西,即:
result = [el.text_content() for el in result]