• 【python爬虫】Xpath


    一、xml是什么

      1、定义:可扩展标记性语言
      2、特点:xml的是具有自描述结构的半结构化数据。
      3、作用:xml主要设计宗旨是用来传输数据的。他还可以作为配置文件。

    二、xml和html的区别

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

        (1)html不区分大小写的,xml区分。
        (2)html有时可以省却尾标签。xml不能省略任何标签,严格按照嵌套首位结构。
        (3)只有xml中有自闭标签(没有内容的标签,只有属性。)<a class='abc'/>
        (4)在html中属性名可以不带属性值。xml必须带属性值。  
        (5)在xml中属性必须用引号括起来,html中可以不加引号。

      2、作用不同

        html主要设计用来显示数据以及更好的显示数据。
        xml主要设计宗旨就是用传输数据

      3、标记不同:xml没有固定标记,html的标记都是固定的,不能自定义。

    三、xpath

      1、什么是xpath?

        xpath是一种筛选html或者xml页面元素的【语法】

      2、xml和html的一些名词

        元素、标签、属性、内容

      3、xml的两种解析方法

        dom和sax

      4、xpath语法

        (1)选取节点

            nodename --- 选取此标签及其所有字标签。
            /----从根节点开始选取。
            // ----从任意节点开始,不考虑他们的位置。
            //book---不管book位置,在xml中取出所有的book标签。
            .----当前节点开始找
            ..----从父节点
            @ ---选取属性
            text()---选取内容

        (2)谓语:起限定的作用,限定他前面的内容。

            []写在谁的后面,就限定谁,一般用于限定元素或者标签。

            //book[@class='abc']

            常见的谓语:
              [@class] ----选取有class
              [@class='abc'] ---选取class属性为abc的节点。
              [contains(@href,'baidu')] ---选取href属性包含baidu的标签
              [1] ---选取第一个
              [last()]---选取最后一个
              [last()-1]---选取倒数第二
              [position()>2]---跳过前两个。
              book[price>30]

        (3)通配符

            * ---匹配任意节点
            @* ---匹配任意属性

        (4)选取若干路径

          | ---左边和右边的xpath选的内容都要---and

      5、lxml模块----python处理xml和html的模块。

        (1)解析字符创类型xml

     1 from lxml import etree
     2 text='''
     3     html页面内容
     4 '''
     5 tree = etree.HTML(text)---返回值就是一个element对象
     6 #element对象有xpath方法,可以通过xpath表达式来筛选内容。
     7 #选取class属性为item-1的li下面的a标签的内容
     8 a_contents = tree.xpath('//li[@class="item-1"]/a/text()')
     9 
    10 将element对象变成字符串的方法
    11 # html_str = etree.tostring(tree,pretty_print=True).decode('utf-8')
    12 # print(type(html_str))

          #elment对象xpath放来筛选,返回值都是一个list。
          #xpath表达式最后一个是一个元素(标签),list中都是elment元素
          #xpath表达式最后一个是属性,list都是属性字符串
          #xpath表达式最后一个是内容,list都是内容字符串

        (2)解析xml或者html文件      

    from lxml import etree
    
    #parse方法是按照xml的方式来解析,如果语法出问题,就会报错。
    html = etree.parse('demo.html')
    
    # print(html)#_ElementTree
    li_texts = html.xpath('//li/a/text()')
    
    print(li_texts)
  • 相关阅读:
    TweenLite简单运用
    nodejs 重定向 (redirect + writeHead(Location))
    Nodejs Web模块( readFile 根据请求跳转到响应html )
    Express框架(http服务器 + 路由)
    AI 学习路线
    implicitly_wait()隐式等待
    Python 爬虫基础Selenium
    Selenium2+python自动化15-select下拉框
    python selenium while 循环
    jupyter notebook修改默认路径和浏览器
  • 原文地址:https://www.cnblogs.com/Tree0108/p/12074912.html
Copyright © 2020-2023  润新知