解析库--XPath
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的更多相关文章
- 网页解析库-Xpath语法
网页解析库 简介 除了正则表达式外,还有其他方便快捷的页面解析工具 如:lxml (xpath语法) bs4 pyquery等 Xpath 全称XML Path Language, 即XML路径语言, ...
- Python3编写网络爬虫05-基本解析库XPath的使用
一.XPath 全称 XML Path Language 是一门在XML文档中 查找信息的语言 最初是用来搜寻XML文档的 但是它同样适用于HTML文档的搜索 XPath 的选择功能十分强大,它提供了 ...
- python爬虫基础04-网页解析库xpath
更简单高效的HTML数据提取-Xpath 本文地址:https://www.jianshu.com/p/90e4b83575e2 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 ...
- 爬虫之解析库Xpath
简介 XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言. XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力.起初XPat ...
- 爬虫解析库xpath
# xpath简介 XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言.用于在 XML 文档中通过元素和属性进行导航. XPath基于XM ...
- BeautifulSoup与Xpath解析库总结
一.BeautifulSoup解析库 1.快速开始 html_doc = """ <html><head><title>The Dor ...
- (最全)Xpath、Beautiful Soup、Pyquery三种解析库解析html 功能概括
一.Xpath 解析 xpath:是一种在XMl.html文档中查找信息的语言,利用了lxml库对HTML解析获取数据. Xpath常用规则: nodename :选取此节点的所有子节点 // : ...
- 网络爬虫之Selenium模块和Xpath表达式+Lxml解析库的使用
实际生产环境下,我们一般使用lxml的xpath来解析出我们想要的数据,本篇博客将重点整理Selenium和Xpath表达式,关于CSS选择器,将另外再整理一篇! 一.介绍: selenium最初是一 ...
- xpath beautiful pyquery三种解析库
这两天看了一下python常用的三种解析库,写篇随笔,整理一下思路.太菜了,若有错误的地方,欢迎大家随时指正.......(conme on.......) 爬取网页数据一般会经过 获取信息-> ...
随机推荐
- ARM汇编指令-STMFD/LDMFD
根据调用规则ATPCS,程序一般都使用FD(FullDescending)类型的数据栈(满栈),那么对立的就由空栈类型的数据栈.空栈是指SP操作完后指向的地址空间是未使用的,反之满栈就是SP指向的地址 ...
- Linux内核实现透视---软中断&Tasklet
软中断 首先明确一个概念软中断(不是软件中断int n).总来来说软中断就是内核在启动时为每一个内核创建了一个特殊的进程,这个进程会不停的poll检查是否有软中断需要执行,如果需要执行则调用注册的接口 ...
- python 爬取腾讯视频的全部评论
一.网址分析 查阅了网上的大部分资料,大概都是通过抓包获取.但是抓包有点麻烦,尝试了F12,也可以获取到评论.以电视剧<在一起>为例子.评论最底端有个查看更多评论猜测过去应该是 Ajax ...
- web 安全 & web 攻防: XSS(跨站脚本攻击)和 CSRF(跨站请求伪造)
web 安全 & web 攻防: XSS(跨站脚本攻击)和 CSRF(跨站请求伪造) XSS(跨站脚本攻击)和CSRF(跨站请求伪造) Cross-site Scripting (XSS) h ...
- node.js module.exports & exports & module.export all in one
node.js module.exports & exports & module.export all in one cjs const log = console.log; log ...
- yapi & mock JSON
yapi & mock JSON json, body https://hellosean1025.github.io/yapi/documents/mock.html response bo ...
- JUC并发集合类CopyOnWriteList
CopyOnWriteList简介 ArrayList是线程不安全的,于是JDK新增加了一个线程并发安全的List--CopyOnWriteList,中心思想就是copy-on-write,简单来说是 ...
- 谷歌地球服务器"失联"的替代方案
2020年11月下旬,谷歌地球开始无法连接.作为谷歌地球的替代方案,推荐使用国产软件"图新地球LSV".网址 http://www.tuxingis.com 下载"图新地 ...
- 如何用JavaDoc命令生成帮助文档
如何用JavaDoc命令生成帮助文档 文档注释 在代码中使用文档注释的方法 /** *@author *@version * */ 生成帮助文档 打开java文件所在位置,在路径前加入cmd (注意有 ...
- 修改yapf中的列宽限制值
yapf是一款由Google开源的Python代码自动格式化工具,它根据PEP 8规范可以帮我们自动格式化我们的代码,让代码更规范.更漂亮.但是其中最大列宽被限制为80,如果超过80,在格式化时就会被 ...