我有一个文本文件包含一些名为“html.txt”的HTML代码,如下所示:
<tr>
<td class="name"><a href="/player/DAVID:RD" class=""><span>David Kwan</span> (DAVID)</a></td>
<td class="teamid" style="">DAVID:RD</td>
<td class="">District Player</td>
<td class="">Red-Dragon Factory</td>
</tr>
参考我从lxml网站上读到的教程,我尝试使用etree
和findall()
方法从HTML代码中提取表数据,但不知怎的,我无法打印以字符串格式输出,我得到的结果是<Element td at 0x267c1c0>
我理解在使用findall
方法时,集合或列表将返回相似的内容,但即使我使用索引0,它也无济于事。另外,使用试错法我尝试使用支持str
强制xpath
字符串格式返回的findall
函数也无济于事。
有人可以告诉我如何纠正这个问题吗?
from lxml import etree
page = open("C:/Python27/project/lxml_project/html.txt").read()
x = etree.HTML(page)
element = (x.findall('.//td[@class="teamid"]'))
print(element)
我的第二个问题是,如果我使用xpath
代替findall
方法,它会是更好的解决方案吗?以前当我尝试使用xpath时,它总是返回第一个搜索元素,即使我在整个html页面中有多个表数据<td>
标记。是否可以使用Python LXML库递归地实现xpath
?
答案 0 :(得分:1)
使用Element.text
attribute检索元素的文本内容:
elements = x.findall('.//td[@class="teamid"]')
print([elem.text for elem in elements])
.findall()
返回一个列表;您可以使用.find()
仅检索第一个匹配项(如果没有匹配的元素,则使用None
。)