from lxml import etree
2 text = '''
3 <div>
4 <ul>
5 <li class = "item-0"><a herf = "link1.html">first item</a></li>
6 <li class = "item-1"><a herf = "link2.html">second item</a></li>
7 <li class = "item-inactive"><a herf = "link3.html">third item</a></li>
8 <li class = "item-1"><a herf = "link4.html">fourth item</a></li>
9 <li class = "item-0"><a herf = "link5.html">fifth item</a></li>
10 </ul>
11 </div>
12 '''
13 html = etree.HTML(text)
14 result = etree.tostring((html))#输出修正后的HTML文本
15 code_all = html.xpath("//*")#选取HTML全部的节点
16 code_li = html.xpath("//li")
17 code_a = html.xpath("//li/a")#选取HTML的li节点的子节点a
18 code_p = html.xpath("//a[@herf = 'link4.html']/../@class")#一直子节点寻找父节点的class属性
19 print(code_p)
20 print(code_li)
21 print("///")
22 print(code_all)
23 print("///")
24 print(code_a)
25 #属性匹配
26 attribute = html.xpath("//li[@class = 'item-0']")
27 print(attribute)
28 #文本获取
29 text = html.xpath("//li/text()")
30 print(text)
31 #属性获取
32 attribute_get = html.xpath("//li/a/@herf")
33 print(attribute_get)
34 #属性多值匹配
35 text1 = """
36 <li class = "li li-fist"><a href = "link.html">first item</a></li>
37 """
38 html1 = etree.HTML(text1)
39 attribute_number = html1.xpath("//li[contains(@class,'li')]/a/text()")
40 print(attribute_number)
41 #多属性匹配
42 text2 = """
43 <li calss = "li li-first" name = "name"><a href = "link.html">first item</a></li>
44 """
45 html2 = etree.HTML(text2)
46 attribute_text2 = html2.xpath("//li[contains(@calss,'li') and @name = 'name']/a/text()")
47 print(attribute_text2)
48 #按序选择
49 """
50 有时候,我们在选择的时候某些属性可能同时匹配了多个节点,但是只想要其中某个节点
51 这是可以利用中括号传入索引的方法获取特定次序的节点
52 """
53 text3 = '''
54 <div>
55 <ul>
<li class = "item-0"><a herf = "link1.html">first item</a></li>
57 <li class = "item-1"><a herf = "link2.html">second item</a></li>
58 <li class = "item-inactive"><a herf = "link3.html">third item</a></li>
59 <li class = "item-1"><a herf = "link4.html">fourth item</a></li>
60 <li class = "item-0"><a herf = "link5.html">fifth item</a></li>
61 </ul>
62 </div>
63 '''
64 html3 = etree.HTML(text3)
65 result = html3.xpath("//li[1]/a/text()")#选取第一个li节点
66 print(result)
67 result = html3.xpath("//li[last()]/a/text()")#选取左后一个li节点
68 print(result)
69 result = html3.xpath("//li[position() < 3]/a/text()")#选取位置小于三的节点
70 print(result)
71 #节点轴选取
72 result = html3.xpath("//li[1]/ancestor::*")#获取所有祖先节点,后跟*表示匹配所有节点
73 print(result)
74 result = html3.xpath("//li[1]/ancestor::div")#获取div这个祖先节点
75 print(result)
76 result = html3.xpath("//li[1]/attribute::*")#获取所有属性
77 print(result)
#运行结果
['item-1']
[<Element li at 0x7f72f489c888>, <Element li at 0x7f72f489c948>, <Element li at 0x7f72f489c9c8>, <Element li at 0x7f72f489ca08>, <Element li at 0x7f72f489ca88>]
///
[<Element html at 0x7f72f489c808>, <Element body at 0x7f72f489c788>, <Element div at 0x7f72f489c748>, <Element ul at 0x7f72f489c848>, <Element li at 0x7f72f489c888>, <Element a at 0x7f72f489c908>, <Element li at 0x7f72f489c948>, <Element a at 0x7f72f489c988>, <Element li at 0x7f72f489c9c8>, <Element a at 0x7f72f489c8c8>, <Element li at 0x7f72f489ca08>, <Element a at 0x7f72f489ca48>, <Element li at 0x7f72f489ca88>, <Element a at 0x7f72f489cac8>]
///
[<Element a at 0x7f72f489c908>, <Element a at 0x7f72f489c988>, <Element a at 0x7f72f489c8c8>, <Element a at 0x7f72f489ca48>, <Element a at 0x7f72f489cac8>]
[<Element li at 0x7f72f489c888>, <Element li at 0x7f72f489ca88>]
[]
['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']
['first item']
['first item']
['first item']
['fifth item']
['first item', 'second item']
[<Element html at 0x7f72f489cdc8>, <Element body at 0x7f72f489cec8>, <Element div at 0x7f72f489cf48>, <Element ul at 0x7f72f489cf08>]
[<Element div at 0x7f72f489cf48>]
['item-0']

解析库--XPath的更多相关文章

  1. 网页解析库-Xpath语法

    网页解析库 简介 除了正则表达式外,还有其他方便快捷的页面解析工具 如:lxml (xpath语法) bs4 pyquery等 Xpath 全称XML Path Language, 即XML路径语言, ...

  2. Python3编写网络爬虫05-基本解析库XPath的使用

    一.XPath 全称 XML Path Language 是一门在XML文档中 查找信息的语言 最初是用来搜寻XML文档的 但是它同样适用于HTML文档的搜索 XPath 的选择功能十分强大,它提供了 ...

  3. python爬虫基础04-网页解析库xpath

    更简单高效的HTML数据提取-Xpath 本文地址:https://www.jianshu.com/p/90e4b83575e2 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 ...

  4. 爬虫之解析库Xpath

    简介 XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言. XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力.起初XPat ...

  5. 爬虫解析库xpath

    # xpath简介 XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言.用于在 XML 文档中通过元素和属性进行导航. XPath基于XM ...

  6. BeautifulSoup与Xpath解析库总结

    一.BeautifulSoup解析库 1.快速开始 html_doc = """ <html><head><title>The Dor ...

  7. (最全)Xpath、Beautiful Soup、Pyquery三种解析库解析html 功能概括

    一.Xpath 解析   xpath:是一种在XMl.html文档中查找信息的语言,利用了lxml库对HTML解析获取数据. Xpath常用规则: nodename :选取此节点的所有子节点 // : ...

  8. 网络爬虫之Selenium模块和Xpath表达式+Lxml解析库的使用

    实际生产环境下,我们一般使用lxml的xpath来解析出我们想要的数据,本篇博客将重点整理Selenium和Xpath表达式,关于CSS选择器,将另外再整理一篇! 一.介绍: selenium最初是一 ...

  9. xpath beautiful pyquery三种解析库

    这两天看了一下python常用的三种解析库,写篇随笔,整理一下思路.太菜了,若有错误的地方,欢迎大家随时指正.......(conme on.......) 爬取网页数据一般会经过 获取信息-> ...

随机推荐

  1. matplotlib 单figure多图

    method 1 import numpy as np import matplotlib.pyplot as plt fg, axes = plt.subplots(1, 2, figsize=(1 ...

  2. document.URL vs window.location.href All In One

    document.URL vs window.location.href All In One document.URL 与 window.location.href 两者有啥区别 document. ...

  3. 使用 js 实现十大排序算法: 归并排序

    使用 js 实现十大排序算法: 归并排序 归并排序 refs js 十大排序算法 All In One https://www.cnblogs.com/xgqfrms/p/13947122.html ...

  4. free open music API all in one

    free open music API all in one music API SoundCloud xgqfrms · free https://w.soundcloud.com/player/? ...

  5. Node.js & ES Modules & Jest

    Node.js & ES Modules & Jest CJS & ESM CommonJS https://en.wikipedia.org/wiki/CommonJS ht ...

  6. bob and brad physical therapy knee exercise

    bob and brad physical therapy knee exercise 鲍勃和布拉德物理治疗膝关节运动 https://bobandbrad.com/ youtube https:// ...

  7. css & background & svg

    css & background & svg https://developer.mozilla.org/en-US/docs/Web/CSS/background backgroun ...

  8. vuex bug & vue computed setter

    vuex bug & vue computed setter https://vuejs.org/v2/guide/computed.html#Computed-Setter [Vue war ...

  9. 近期最值得关注的潜力币种——VAST

    近期币圈的热度又再次被掀起,很多新的币种也争相上线,还有一些币种虽然还未上线,但是在币圈的火热程度也非同一般.小编留意了一下,最近在币圈讨论的最火的便是VAST代币.许多生态建设者乃至机构都表示很看好 ...

  10. django中间件介绍

    在学习django中间件之前,先来认识一下django的生命周期,如下图所示: django生命周期:浏览器发送的请求会先经过wsgiref模块处理解析出request(请求数据)给到中间件,然后通过 ...