findall和xpath问题

时间:2014-05-31 10:22:32

标签: python python-2.7 lxml

我有一个文本文件包含一些名为“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网站上读到的教程,我尝试使用etreefindall()方法从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

1 个答案:

答案 0 :(得分:1)

使用Element.text attribute检索元素的文本内容:

elements = x.findall('.//td[@class="teamid"]')
print([elem.text for elem in elements])

.findall()返回一个列表;您可以使用.find()仅检索第一个匹配项(如果没有匹配的元素,则使用None。)