findall和xpath问题
我有一个文本文件,里面包含一些HTML代码,叫做“html.txt”,内容如下:
<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
函数来强制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
?
1 个回答
2
使用 Element.text
属性 可以获取一个元素的文本内容:
elements = x.findall('.//td[@class="teamid"]')
print([elem.text for elem in elements])
.findall()
方法会返回一个列表;如果你只想获取第一个匹配的结果,可以使用 .find()
方法(如果没有找到匹配的元素,它会返回 None
)。