xpath

一、什么是xml

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

二、xml和HTML的区别

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

    (1)html不区分大小写的,xml区分。
    (2)html有时可以省却尾标签。xml不能省略任何标签,严格按照嵌套首位结构。
    (3)只有xml中有自闭标签(没有内容的标签,只有属性。)
    (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)

你可能感兴趣的:(xpath)