码迷,mamicode.com
首页 > 其他好文 > 详细

今天工作犯了一个特别2的错误

时间:2017-04-19 09:30:54      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:原因   text   函数   错误   应该   get   部分   递归函数   没有   

今天用python的lxml组件解析网页代码,需要找到特定区域的文本,lxml的etree有HTML方法可以将得到的html代码转换成树结构,然后用xpath寻找特定区域

当我找到这个区域,我需要得到该区域内的文本(在c#里面htmlnodeelement有个innertext的属性可以直接得到)而在lxml里面HTML方法返回的element对象没有这个方便的属性,只有个text属性是返回当前node自己的text并不包括他的subnode的text,当然lxml里有另外一种方法可以得到htmlelement,htmlelement可以通过text_content方法可以直接得到,但是那需要使用htmlparse来解析网页代码,我又懒得把解析那部分代码改掉,所以我决定自己写个递归函数(因为是树结构嘛),来得到我要的文本内容

def gettext(node):

    if len(node)==0:

        return node.text if node.text is not None else ""

    else:

        return node.text if node.text is not None else "" + "".join([gettext(x) for x in node])

这个函数看上去是那么的完美,结果却没有得到我想得到的结果,在经过我15分钟的辛勤debug之后,我发现我tm就是个sb,居然忘记在最后一行里面用括号括住node.text的部分,结果就是只有当node.text是none的时候才会递归

正确的最后一行应该是

       return (node.text if node.text is not None else "") + "".join([gettext(x) for x in node])

 

错误的原因可以归结为马虎(这个词在我童年的时候一次次刺痛了我,我长大才发现,这么马虎我居然是随我妈,我健全的长大真是个奇迹啊),也可以归结为我并不了解if else和+的运算优先级

今天工作犯了一个特别2的错误

标签:原因   text   函数   错误   应该   get   部分   递归函数   没有   

原文地址:http://www.cnblogs.com/16264412xm/p/6731578.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!