zoukankan      html  css  js  c++  java
  • 今天工作犯了一个特别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和+的运算优先级

  • 相关阅读:
    大数据基础——MR编程应用——对中间件的操作
    Hadoop_Hive整理——原理及配置
    Hadoop&Hive——小结
    mysql_小结之事务
    Linux_大数据与数据仓库
    移动布局小结
    JDBC——小结
    Mysql优化反刍
    NoSql-Verson1.0
    python-6
  • 原文地址:https://www.cnblogs.com/16264412xm/p/6731578.html
Copyright © 2011-2022 走看看