1、xpath的介绍
1.1基本概念
XPath(XML Path Language)是一种XML的查询语言,他能在XML树状结构中寻找节点。XPath 用于在 XML 文档中通过元素和属性进行导航
xml是一种标记语法的文本格式,xpath可以方便的定位xml中的元素和其中的属性值。lxml是python中的一个包,这个包中包含了将html文本转成xml对象,和对对象执行xpath的功能
1.2节点的关系
xml_content = '''
<bookstore>
<book>
<title lang='eng'>Harry Potter</title>
<author> J K.Rowing</author>
<year>2005</year>
<price>29<price>
</book>
</bookstore>
'''
# <bookstore> 文档结点
# <author>J K.Rowing</author> 元素结点
# lang='eng' 属性结点
# 父Parent
# book 是 title author year price这些元素的父类
# 子Children
# title author year price这些元素是book的子类
# 同胞Sibling
# title author year price 元素是同
2、安装和使用(可选步骤)
前言:这是针对初级学生准备的测试工具,可以输出直接看到结果,方便测试以及写后续的代码,如果是大牛可以直接在pycharm中写,直接在那里测试,不用这个调试工具也可以,大牛直接跳第三步
2.1下载压缩包(自行提取)
链接:https://pan.baidu.com/s/1spLwpeJm-JFf3xVAuas_xg
提取码:mp5s
复制这段内容后打开百度网盘手机App,操作更方便哦
2.2解压以及安装(第一种方法)
打开浏览器的设置–>更多工具–>扩展程序界面。然后解压压缩包在桌面或者自己知道的文件夹下会有两个文件一个压缩包一个.crx文件,直接将.crx.文件拖入扩展程序内即可
2.2解压以及安装(第二种方法第一种失败了就用它)
将解压压缩包的另一个压缩文件解压在自己知道的路径中,点击加载已解压的扩展程序。将解压的文件添加即可
2.3 使用
①加载完成,关闭浏览器重新进入,ctrl +shift +x会进入xpath的使用(或者去可扩展的程序打开)
②F12进入开发者模式开始抓包可以直接点击想要获取的数据用xpath获取
③输入则会产生结果
3、 xpath语法的使用
查找某个特定的节点或者包含某个指定的值的节点
3.1模块的使用
3.1.1介绍
在Python中,要安装lxml库才能使用XPath 技术
lxml官网,lxml 是 一个HTML/XML的解析器,主要的功能是利用etree.HTML解析和提取HTML/XML数据,将字符串转化为Element对象,在使用xpath提取数据
3.1.1安装
pip 安装:pip install lxml
lxml 可以⾃动修正 html 代码(将缺少的标签包裹补齐)
要使用xpath就要引入etree这个类from lxml import etree
这个etree类能干什么?
①将html字符串转化为element对象
②element对象可以转换为字符串或者二进制类型
from lxml import etree
element = etree.HTML(wb_data)
r = etree.tostring(element)#将字符串转化为字节流数据
# print(r,type(r))
result = r.decode()
print(type(result),result)#将字节流转化为字符串
4、案例实现
通过xpath的使用爬取豆瓣top250步电影中的第一页数据保存在csv中(没有做翻页的实现,如果想要翻页的同学遇到问题留言找我)
import requests
from lxml import etree
import csv
# 设置标题栏
with open('豆瓣.csv', 'a', newline='')as f:
s = csv.writer(f, dialect='excel')
s.writerow(['影片名称','评分','链接地址','引言'])
url = 'https://movie.douban.com/top250?start={}&filter='.format(i*25)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}
result = requests.get(url,headers=headers).text
dom = etree.HTML(result)
# 提取数据
res_names = dom.xpath('//div[@class="hd"]/a/span[@class="title"][1]/text()')
# print(len(res_names))
res_links = dom.xpath('//div[@class="hd"]/a/@href')
stars = dom.xpath('//div[@class="star"]/span[@class="rating_num"]/text()')
quotes = dom.xpath('//p[@class="quote"]/span[@class="inq"]/text()')
# print(res_names,res_links,stars,quotes)
# for i in res:
# print(i)
for res_name,star,res_link,quote in zip(res_names,stars,res_links,quotes):
with open('豆瓣.csv','a',newline='')as f:
s = csv.writer(f,dialect='excel')
s.writerow([res_name,star,res_link,quote])