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

  • 相关阅读:
    让linux下的eclipse支持GBK编码
    Ubuntu 14.04 安装深度音乐的方法(下载速度极慢未成功)
    wine使用
    Sql语句查看表结构
    读数据库所有表和表结构的sql语句
    详解软件工程之软工文档
    浅谈UML的概念和模型之UML九种图
    HTML5 file api读取文件的MD5码工具
    Sublime Text 3 快捷键汇总
    领域驱动设计系列文章汇总
  • 原文地址:https://www.cnblogs.com/16264412xm/p/6731578.html
Copyright © 2011-2022 走看看