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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值