一、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

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

最新文章

  1. SharePoint 2016 配置向导报错 - The &#39;ListInternal&#39; attribute is not allowed
  2. find命令详解
  3. BZOJ2610 : [Poi2003]Monkeys
  4. 使用C#在word中插入页眉页脚
  5. Dapper.NET - ORM(ibatis.Net)
  6. 【随记】还原SQL Server数据库步骤
  7. zeromq源码分析笔记之架构(1)
  8. 解决linux下javac -version和java -version版本显示不一致
  9. [刷题]算法竞赛入门经典(第2版) 5-14/UVa1598 - Exchange
  10. ubuntu11.04编译gm8180的ffmpeg
  11. [Poi2012]Festival 差分约束+tarjan
  12. 想了解SAW,BAW,FBAR滤波器的原理?看这篇就够了!
  13. css3 --linear-gradient-渐变色
  14. 面试笔记--HashMap扩容机制
  15. 面试题(校招java)
  16. luogu P3978 [TJOI2015]概率论
  17. fullcalendar插件日程管理
  18. CRISPR基因编辑
  19. 2018ICPC网络赛(焦作站)E题题解
  20. 【CSAPP笔记】12. 高速缓存存储器

热门文章

  1. nessus安装、msfconsole辅助模块使用(网安全实训第三天)
  2. 【Flutter】348- 写给前端工程师的 Flutter 教程
  3. web开发中浏览器跨域问题
  4. ansible部署nginx
  5. go 1.13编译遇到xxx/go.mod malformed record data 问题
  6. 判断机器CPU的大小端模式并将数据转换成小端形式
  7. 【玩转SpringBoot】让错误处理重新由web服务器接管
  8. vue-cli项目中引入第三方插件
  9. HttpRunner学习10--hook机制
  10. c++-继承的学习