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))
posted @   鸭梨的药丸哥  阅读(8)  评论(0编辑  收藏  举报  
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示