zoukankan      html  css  js  c++  java
  • 爬虫---lxml简单操作

      前几篇写了一些Beautiful Soup的一些简单操作,也拿出来了一些实例进行实践,今天引入一个新的python库lxmt,lxmt也可以完成数据的爬取哦

    什么是lxml

     lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。

    lxml学习文档:https://lxml.de/

    什么是xpath

    XPath相信大家都知道,在做自动化测试的时候有个定位方法就是xpath,对没错就是它;

    XPath , 全称XML Path Language ,即XML 路径语言,它是一门在XML 文档中查找信息的语言。它最初是用来搜寻XML 文档的,但是它同样适用于HTML 文档的搜索。XPath的选择功能十分强大,它提供了非常简明的路径选择表达式,另外,它还提供了超过100个内建函数,用于字符串、数值、时间的匹配以及节点、序列的处理等,几乎所有我们想要定位的节点,都可以用XPath来选择;

    XPath常用规则

    表达式 描述
    nodename 选取此节点的所有子节点
    / 从当前节点选取直接子节点
    // 从当前节点选取子孙节点
    . 选取当前节点
    .. 选取当前节点的父节点
    @ 选取属性
    * 通配符,选择所有元素节点与元素名
    @* 选取所有属性
    [@属性] 选取具有给定属性的所有元素
    [@属性=‘value’] 选取给定属性具有给定值的所有元素

    XPath学习文档:https://www.w3.org/TR/xpath/all/

    lxml安装

    windows安装

    # lxmt安装
    pip install lxml
    
    #如果按照失败,可能缺少libxml2库信息,选择wheel进行安装
    # https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载对应python版本的lxml版本
    
    pip install 下载内容(lxml版本)

    Liunx安装

    # 通过pip安装
    pip install lxml

    lxml简单使用

    <html>
    <body>
    <div>
    <ul>
    <li class="item-0"><a href="link1.html">今天天气</a></li>
    <li class="item-1"><a href="link2.html">明天天气</a></li>
    <li class="item-2"><a href="link3.html">后天天气</a></li>
    <li class="item-3"><a href="link4.html">周末天气</a></li>
    </ul>
    </div>
    </body>
    </html>

    通过上面简单的HTML简单了解下lxml.etree

    使用lxml下的etree首先解析html内容,通过xpath进行找到对应的li标签内容

    1、获取li所有节点

    # 导入lxml
    from lxml import etree
    # 解析
    html = etree.HTML(text)
    result = html.xpath('//li')
    
    
    代码结果:
    [<Element li at 0x3a0a8c8>, <Element li at 0x3a0a888>, <Element li at 0x3a0a988>, <Element li at 0x3a0a9c8>]

    这里可以看到是一个列表形式,其中每个元素都是一个element对象,如果要取出其中一个对象,可以直接通过下标

    2、获取子节点

    # 导入lxml
    from lxml import etree
    # 解析
    html = etree.HTML(text)
    # 查找li下的所有的a标签
    result = html.xpath('//li/a')
    
    
    代码结果:
    [<Element li at 0x3a0a8c8>, <Element li at 0x3a0a888>, <Element li at 0x3a0a988>, <Element li at 0x3a0a9c8>]

    3、获取li标签下的所有文字

    # 导入lxml
    from lxml import etree
    # 解析
    html = etree.HTML(text)
    # 通过text()获取全部文字
    result = html.xpath('//li/a/text()')
    
    
    代码结果:
    ['今天天气', '明天天气', '后天天气', '周末天气']

    4、属性获取

    # 导入lxml
    from lxml import etree
    # 解析
    html = etree.HTML(text)
    # 通过@属性值获取对应属性
    result = html.xpath('//li/a/@href')
    
    代码结果:
    ['link1.html', 'link2.html', 'link3.html', 'link4.html']
  • 相关阅读:
    记一次文件转码与二进制查看学习
    JAVA线程池 之 Executors (二) 原理分析
    JAVA线程池 之 Executors (一) 简介
    问题:部分mysql版本问题
    Java中一个方法字节码的长度会影响程序并发下的性能?
    AccessController.doPrivileged
    Nginx配置WebService、MySQL、SQL Server、ORACLE等代理
    C# 序列化Json时如何忽略JsonProperty(PropertyName =“ someName”)
    C# 文件上传(另一台服务器的共享目录)
    C# 导入Excel读取图片上传
  • 原文地址:https://www.cnblogs.com/qican/p/11190832.html
Copyright © 2011-2022 走看看