• 爬虫基础知识(肆)


    一、XML:

      1、定义:可扩展标记语言(Extensible Markup Language)。

      2、特定:XML是具有自描述特性的半结构化数据。

      3、作用:XML主要用于传输数据。

    二、XML和HTML的区别:

      1、语法要求不同:XML的语法要求更为严格。

        (1)、在HTML中不区分大小写,但是在XML中严格区分。

        (2)、在HTML中,有时不严格,如果上下文清楚地显示出段落或者列表键在何处结尾,那么是可以省略</p>或者</li>标记。在XML中,是严格的树状结构,绝对不能省略任何标记。

        (3)、在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个"/"字符作为结尾。例:<a href="www"/>

        (4)、在XML中,属性值必须分装在引号中。在HTML中,引号可用可不用。

        (5)、在HTML中属性名可以不带属性值,XML必须带有属性值。

        (6)、XML文档中,空白部分不会被解析器自动删除,但是HTML是过滤掉空格的。

      2、标记不同:

        (1)、HTML使用固有的标记,XML没有固有标记。

        (2)、HTML标签是预定义的,XML标签是自定义、可扩展的。

      3、作用不同:

        (1)、HTML的设计宗旨是用来显示数据。

        (2)、XML是用来传输数据的。

    三、xpath(语法):

      1、什么是xpath:

        xpath就是用来筛选HTML或者XML中元素语法。

        xpath方法返回的都是列表,在查元素和标签的时候列表中的元素都是element对象,查属性和元素的时候,列表中的元素都是字符串。

      2、XML和HTML中一些名字:

        元素:即标签

        标签

        属性

        内容

      3、xpath的语法:

        (1)、选取节点:

          .              ---------   当前节点

          ..             ---------   父节点

          /              ---------   从根节点开始

          //             ---------   从文档任意位置

          nodename       ---------   选取标签或元素

          @属性名        ---------   选取属性名所对应的属性值

          text()         ---------   选取文本内容

        (2)、谓语:

          a、可以通过位置限定:

            [数字] 选取第几个            ---   例://ul/li[1]

            [last()]选取最后一个         ---   例://body/div[last()]

            [last()-1]选取倒数第二个     ---   例://ul/li[last()-1]

            [position()>1]选取位置大于1  ---   例://dl/dd[position()>1]

          b、通过属性限定:

            [@class]选取含有class属性的      例://div[@class]

            [@class="属性值"]选取class属性等于属性值的      例://div[@class="container"]

            [@class="属性值" and @id="属性值"]选取class属性为属性值并且id属性为属性值的      例://div[@class="container" and @id="content"]

            [@class="属性值" or @id="属性值"]选取class属性为属性值或者id属性为属性值的      例://div[@class="container" or @id="content"]

            [contains(@href,"baidu")]选取属性名为href的属性值包含baidu的标签      例://a[contains(@href,".cn")]

          c、通过子标签的内容来限定:

            //book[price>35]选取book标签的price子标签的内容大于35的book标签。

        (3)、通配符:*

          @*   ------   任意属性

          *    ------   任意节点

    四、lxml模块:

      lxml模块是python用来解析XML和HTML的第三方模块,用这个模块就可以使用xpath语法。需要通过pip安装。

    #导入模块
    #第一种方式:直接导入
    from lxml import etree
    #注:此种导入方式,可能会报错,但不影响正常使用
    #第二种:
    from lxml import html
    etree=html.etree

      lxml的使用方法:

        将xml或者html解析成element对象;

        使用HTML方式进行解析的,将来解析的内容就是HTML文档;

        如果内容没有HTML标签,就会自动补全;

      例:

    html = etree.HTML(text) #text是HTML或xml格式的字符串类型数据

      tostring方法可以将element对象编译为字符串。
      例:

    etree.tostring(html, pretty_print=True).decode('utf-8')# pretty_print参数指定是是否将数据结果格式化,默认为Flase

      xpath方法:

        1、element对象有xpath方法,可以写xpath语法进行筛选数据。
        2、元素和标签:xpath表达式最后一个内容如果是元素或者标签,将来取到的内容就是这个标签的element对象,这个对象可以继续使用xpath进行选取
        3、xpath方法返回的是一个list,里面存储的是筛选出来的所有内容

      例:

    content=html.xpath('//ul/li[1]/a/text()')

      parse方法:
        从文件中读取数据,并按照xml的语法要求来进行解析的。

    tree = etree.parse('a.html')
  • 相关阅读:
    macOS Big Sur 关闭 SIP 正确方法
    绕过CDN寻找真实IP的8种方法
    mycat 链接mysql提示ERROR 3009 (HY000): java.lang.IllegalArgumentExceptio解决方式
    【SpringBoot】SpringBoot 内嵌容器及性能
    【Java】基于NIO的聊天室
    【Java】基于BIO的聊天室
    【ZooKeeper】ZooKeeper源码编译
    【SpringBoot】 使用外部Tomcat方法及启动原理
    【Java】深入理解SPI机制
    【SpringBoot】SpringBoot 自动配置原理
  • 原文地址:https://www.cnblogs.com/lavender1221/p/12308571.html
Copyright © 2020-2023  润新知