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


    今天用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和+的运算优先级

  • 相关阅读:
    一元多项式乘法
    将博客搬至CSDN
    Tomcat的几种部署方式
    Visual Studio 2012以后无法保存只读文件的问题
    WPF中的Generic.xaml, theme以及custom control
    WPF的页面导航
    WPF MVVM系列文章
    tomcat中同时部署两个项目的问题
    Windows多线程系列
    XML DTD和XML Schema
  • 原文地址:https://www.cnblogs.com/16264412xm/p/6731578.html
Copyright © 2020-2023  润新知