xpath的使用
什么是xml:
定义:可扩展标记语言
特点:xml具有自描述结构的半结构化数据。
作用:xml主要设计总之是用来传输数据,还可以做为一些应用的配置文件
xml和html的区别:
- 语法要求不同:xml的语法要求更严格
- html不区分大小写,xml区分
- html的标签在某些条件下不严格,如果上下文清楚地显示出段落或者标签在何处结束,他可以省略为标签,但xml不能省略任何标签
- 只有xml中有自闭标签。<a/>--只能有属性,没有内容的标签
- 在html中属性名可以不带属性值,xml中必须带
- 在xml中属性必须用引号括起来,html可以不加引号
- 作用不同:xml主要用来传输数据,html主要用来显示数据
- 标记不同:xml没有固定的标记,html的标签都要特殊含义,不能自定义
什么是xpath
- xpath是一种提取xml或者html内容的语法
- xml和html中的名词对比:xml 元素==html标签 标签的名字+属性+内容+后代标签
- xpath的语法:
- 选取节点
- nodename----选取此标签及所有子标签
- / ----从根节点开始找
- // ----从任意位置开始找,不考虑他们的位置
- . ----当前节点
- .. ----父节点
- @----选取属性
- text()----选取内容
- 谓语
-
- 谓语的作用:限定
- []----写在元素后面,用来限定这个元素
- [@class="abc"]----class属性为abc的元素
- [@id="aaa"]----id属性为aaa的元素
- [@class]----选取有class属性的元素
- [1]----第一个
- [last()]----选最后一个
- [last()-1]----倒数第二个
- [position()>2]----选取位置大于2
- book[position()>2---从第三本书开始选取
- [contains(属性名a,属性值b)]属性a包含b的标签
- book[contains(@href,'baidu')]
- 通配符
- * ---任意元素
- @* ---任意属性
- 选取若干路径
- //title|//price ---选取所有的title和price标签
- 选取节点
练手:
from lxml import etree #解析字符串 text = """ <div> <ul> <li class="item-0"><a href="link1.html">first item</a><li> <li class="item-1"><a href="link2.html">second item</a><li> <li class="item-inactive"><a href="link3.html">third item</a><li> <li class="item-1"><a href="link4.html">fourth item</a><li> <li class="item-0"><a href="link5.html">fifth item</a> </ul> </div> """ #把字符串变成element对象 #就是讲一个xml文档字符串解析成html内容方法 tree = etree.HTML(text) print(tree)#Element #把element对象变成字符串 # print(etree.tostring(tree,pretty_print=True).decode('utf-8')) #element对象可以调用xpath方法来筛选内容 #选取标签内容 a_text = tree.xpath('//a[@href="link1.html"]/text()') # print(a_text)#['first item'] # element.xpath()-->返回值是一个list #选取属性 a_href = tree.xpath('//ul/li[@class="item-inactive"]/a/@href') print(a_href) ''' <html> <body><div> <ul> <li class="item-0"><a href="link1.html">first item</a></li><li> </li><li class="item-1"><a href="link2.html">second item</a></li><li> </li><li class="item-inactive"><a href="link3.html">third item</a></li><li> </li><li class="item-1"><a href="link4.html">fourth item</a></li><li> </li><li class="item-0"><a href="link5.html">fifth item</a></li><li> </li></ul> </div> </body> </html>'''

浙公网安备 33010602011771号