xpath学习
xpath学习
parsel包
该包主要用来将请求后的字符串格式解析成re,xpath,css进行内容的匹配,主要是对XML和HTML等进行分析。
xpath语法
/ #根节点或节点间的过渡
// #跨越节点获取节点
. #选取当前节点
.. #当前节点的父节点
@ #选取属性
text() #选取文本
[index] #根据index获取第index个标签(index从1开始)
[@Classname] #根据属性名获取标签
contains(p,content) #模糊查询(p定位,content匹配字段)
一些语法示例
#根节点下的html的标签中的body标签中的div标签中的div标签
/html/body/div/div
#获取所以a标签
//a
#获取html的标签中的body标签中的所有a标签(可以跨越节点,不必一定是子节点)
/html/body//a
#在当前节点下的a标签
./a
#当前节点的父标签中的a标签
../a
#根节点下的html的标签中的body标签中的a标签中的class属性
/html/body/a/@class
#li便签下的第3个li标签
//li[3]
#通过属性定位
//a[@href=""]
#html的标签中的body标签中的a标签中的文本内容
/html/body/a/text()
#获取a标签,并且属性name中有字段"myname"
//a[contains(@name,"myname")]
一些官方例子:
假设有HTMLcode
<html>
<head>
<base href='http://example.com/' />
<title>Example website</title>
</head>
<body>
<div id='images'>
<a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>
<a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>
<a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>
<a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>
<a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>
</div>
</body>
</html>
那么我们可以这样创建选择器selector。selector支持解析css,xpath,re语法等。
>>> import requests
>>> from parsel import Selector
>>> url = 'https://parsel.readthedocs.org/en/latest/_static/selectors-sample1.html'
>>> text = requests.get(url).text #获取网页的str文本
>>> selector = Selector(text=text) #解析字符串获取解析器
进行xpath解析
#我们可以通过selector.xpath(xpath)方法进行xpath解析,返回解析器
#使用getall()和get()获取文本信息
#使用extract()获取信息和getall()一样
#这里放回的是解析结果
>>> selector.xpath('//title/text()')
[<Selector xpath='//title/text()' data='Example website'>]
#获取所有解析的文本的列表
>>> selector.xpath('//title/text()').getall()
['Example website']
#获取第一个解析的文本
>>> selector.xpath('//title/text()').get()
'Example website'
#同.getall()
>>> selector.xpath('//title/text()').extract()
['Example website']
其他例子:
import parsel
html_str='''
<html>
<head>
<base href='http://example.com/' />
<title>Example website</title>
</head>
<body>
<div id='images'>
<a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>
<a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>
<a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>
<a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>
<a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>
</div>
</body>
</html>
'''
selector = parsel.Selector(html_str)
print(selector)
print(type(selector))
selectorList = selector.xpath('/html/head/title/text()')
print(selectorList)
print(type(selectorList))
result = selectorList.extract()
print(result)
print(type(result))
result2 = selectorList.getall()
print(result2)
print(type(result2))
result3 = selectorList.extract_first()
print(result3)
print(type(result3))
result4 = selectorList.extract_first()
print(result4)
print(type(result4))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)