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))