findall和xpath问题

1 投票
1 回答
4835 浏览
提问于 2025-04-18 08:07

我有一个文本文件,里面包含一些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网站上看到的教程,我尝试使用etreefindall()方法来提取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)。

撰写回答