• 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()
  • 相关阅读:
    SQliteDatabase详解
    Eclipse常用快捷键
    Android 省市区三级联动
    关于安卓9patch图片的探究
    9patch
    Day3_UI布局--FXQ
    day2-UI布局
    Day01_扩展_Genymotion模拟器的使用
    React Examples
    React项目结构
  • 原文地址:https://www.cnblogs.com/yarightok/p/15820864.html
Copyright © 2020-2023  润新知