zoukankan      html  css  js  c++  java
  • Pythonlxml

    lxml 一点常用的操作

    from lxml import etree
    
    
    def get_all_child_node_text():
        txt = """
        <div class="content" id='id_' name='name_'>
            <p>输入只有一行半径r.</p>
        </div>
        <div class="content">
            <p>输出有多行,每一行是跟输入对应面积.</p>
            <p>输出保留6位小数</p>
        </div>
        """
        html = etree.HTML(txt)
        contents = html.xpath('//div[@class="content"]')
        lst = []
        for e in contents:
            # 第一种方式,通过使用xpath的string()方法
            # string(.)中的.代表当前节点
            # lst.append(e.xpath('string(.)').strip())
            # ['输入只有一行半径r.', '输出有多行,每一行是跟输入对应面积.\n        输出保留6位小数']
            # lst.append(e.xpath('string(.)'))
            # ['\n        输入只有一行半径r.\n    ', '\n        输出有多行,每一行是跟输入对应面积.\n        输出保留6位小数\n    ']
            # lst.append(e.xpath('string(.)').replace('\n', '').strip())
            # ['输入只有一行半径r.', '输出有多行,每一行是跟输入对应面积.        输出保留6位小数']
    
            # 第二种方式使用lxml节点自带的方法itertext()
            # lst.append(''.join(e.itertext()))
            # ['\n        输入只有一行半径r.\n    ', '\n        输出有多行,每一行是跟输入对应面积.\n        输出保留6位小数\n    ']
            # lst.append(''.join(e.itertext()).replace('\n', '').strip())
            # ['输入只有一行半径r.', '输出有多行,每一行是跟输入对应面积.        输出保留6位小数']
            lst.append(''.join([s.strip() for s in e.itertext()]).replace('\n', '').strip())
            # ['输入只有一行半径r.', '输出有多行,每一行是跟输入对应面积.输出保留6位小数']
    
            # 第三种,通过使用xpath的text()  效果与itertext()类似,估计itertext()就是封装了这个
            # print('e.xpath text', e.xpath('./text()'))  # 只获取当前节点的直接文本,不包含子节点
            # print('e.xpath all text', e.xpath('.//text()'))  # 包含子节点文本 打印的是list
            # lst.append(''.join(e.xpath('.//text()')))
            # ['\n        输入只有一行半径r.\n    ', '\n        输出有多行,每一行是跟输入对应面积.\n        输出保留6位小数\n    ']
            # lst.append(''.join(e.xpath('.//text()')).replace('\n', '').strip())
            # ['输入只有一行半径r.', '输出有多行,每一行是跟输入对应面积.        输出保留6位小数']
            # lst.append(''.join([s.strip() for s in e.xpath('.//text()')]).replace('\n', '').strip())
            # ['输入只有一行半径r.', '输出有多行,每一行是跟输入对应面积.输出保留6位小数']
    
            # 第四种,使用etree.tostring(...)方法
            # print('etree.tostring', etree.tostring(e, method='text', encoding='unicode'))  # 打印的是字符串
            # lst.append(etree.tostring(e, method='text', encoding='unicode'))
            # ['\n        输入只有一行半径r.\n    \n    ', '\n        输出有多行,每一行是跟输入对应面积.\n        输出保留6位小数\n    \n    ']
            # lst.append(etree.tostring(e, method='text', encoding='unicode').replace('\n', '').strip())
            # ['输入只有一行半径r.', '输出有多行,每一行是跟输入对应面积.        输出保留6位小数']
    
        # 感觉用第二种简洁一点,效果与第三种类似
        print(lst)
    
    
    def key_operator():
        html = etree.HTML('html文本')
        element_list = html.xpath('xpath')
        element_list = html.cssselect('css选择器')
        element = element_list[0]
        etree.tostring(element, encoding='utf-8')  # 字符编码控制
        print(element.tag)  # 标签名称
        print(element.text)  # 文本
        print(element.tail)  # 文本
        print(element.attrib)  # 属性 类似字典结构
        print(element.get('属性名称'))  # 也可用直接通过get方法获取属性值
    
    
    if __name__ == '__main__':
        get_all_child_node_text()
  • 相关阅读:
    ORACLE触发器详解
    论文笔记 Interpreting Black-Box Classifiers Using Instance-Level Visual Explanations
    Popush迭代2个人总结
    Popush迭代1个人总结
    Popush第5次会议记录
    Xv6代码阅读报告之进程调度
    Popush源代码学习报告
    Popush 第二次小组会议记录及分工
    Popush 用户故事
    “老衲印象”开发团队章程
  • 原文地址:https://www.cnblogs.com/yarightok/p/15820864.html
Copyright © 2011-2022 走看看