2014-10-02 84 views
0
parser = etree.HTMLParser() 
tree = etree.parse(StringIO(input), parser) 

for target in tree.findall("//tr[@class='error']"): 
print target.tail 

我想执行上面的代码,在此之后 trclass="error"id="Testcase_5">元树:.tail()始终返回NONE

<tr class="error" id="Testcase_5"><td><a href="blabla">Hello</a></td><td>test</td><td>test</td> <td>test</td><td>Failed</td><td></td><td></td></tr> 

但是我得到的是无

回答

0

tail的取一切,由lxml定义为:

直接跟着的文字S中的元素,直到下一个元素在XML树

由于您tr类没有任何文本超出<tr> .... </tr>,我们只是有一个元素,它返回None

比方说,input是:

'<tr class="error" id="Testcase_5"><td><a href="blabla">Hello</a></td><td>test</td><td>test</td> <td>test</td><td>Failed</td><td></td><td></td></tr>i am the tail' 

那么输出将i am the tail


现在回到你的问题,如果要提取您可以在<tr>节点中的所有文本做这样的事情:

parser = etree.HTMLParser() 
tree = etree.parse(StringIO(input), parser) 

for target in tree.findall(".//tr[@class='error']"): 
    #print target.tail 
    print target.xpath("//text()") 

这将打印:

['Hello', 'test', 'test', ' ', 'test', 'Failed'] 

检查lxml docs