使用Xpath进行数据爬虫,一个超好用的插件工具值得下载
文章目录
前言
使用python进行页面解析时,有三种方式:正则表达式、bs4、以及Xpath。其中Xpath是三种方法中最简便也是用得最广的一种。但是对于新手来说,编写代码来定位标签仍然是一个不小的难题。在我第一次使用Xpath的时候,试错了将近2h也没搞好标签定位,这里介绍我的第一个项目时,顺带推销个超好用的Xpath定位工具——插件:XPath Helper Chrome(但是个人的看法,还是要尽量自己写,不能仅仅依靠Helper,可以作为一种对比工具,看你的答案和Helper有什么区别?)
一、Xpath是什么
度娘说:XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。用于定位HTML页面中的某一元素。
通过一张网图我们可以清晰看到HTML的组成部分,一般我们用Xpath确定路径来定位树形结构中的某个叶子节点。
使用XPath Helper Chrome我们能快速得出节点的绝对路径和相对路径。(用电脑截图有点问题,此处继续借用网图)
绝对路径比较直观、好理解,但是不灵活,相当于从一棵树的底部往上数,经过哪个树根、哪片树叶都数的清清楚楚。
一个绝对路径的例子:/html/body/div[1]/div[3]/div[1]/div[3]/div[1]/h3/a
而相对路径则是我们最常使用的一种,以“//”开头,从任意节点开始,一般我们会选取一个可以唯一定位到的元素开始写,可以增加查找的准确性。
二、使用步骤
1.爬取网页PPT的一个实践
环境搭建:pycharm2020.2版,加载requests模块、lxml模块、os模块。
爬取对象:一个网页可供免费下载PPT的第一页。
代码如下:
import requests
from lxml import etree
import os
if __name__ =="__main__":
url = 'http://sc.chinaz.com/ppt/free.html'
headers = {
'User_Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'
}
response = requests.get(url=url,headers=headers)
response.encoding = 'utf-8'
page_text = response.text
if len(page_text)>100:
print('页面数据爬取成功')
#实例化一个对象
tree = etree.HTML(page_text)
list = tree.xpath('//*[@id="container"]/div')
#创建一个文件夹
if not os.path.exists('./PPT素材4'):
os.mkdir('./PPT素材4')
#遍历数据解析加进行局部解析
for ppt_detail in list:
ppt_name = ppt_detail.xpath('./p/a/text()')[0]+'.rar'
ppt_link = "http:"+ppt_detail.xpath('./p/a/@href')[0]
#获得了每个ppt的链接,向每个链接发起请求
ppt_response = requests.get(url=ppt_link,headers=headers)
ppt_page_text = ppt_response.text
#实例化Xpath对象
tree2 = etree.HTML(ppt_page_text)
list2_link = tree2.xpath('//*[@id="down"]/div[2]/ul/li[1]/a/@href')[0]
ppt_downlode =requests.get(url=list2_link,headers=headers).content
#获得了该页ppt的下载链接,应该进行持久化储存
PPt_path = 'PPT素材4/' + ppt_name
with open(PPt_path, 'wb') as fp:
fp.write(ppt_downlode)
print(ppt_name, '下载成功!!!')
2.数据存储
总结
简单地介绍一个工具,对Xpath的两种路径进行说明,并使用Xpath来进行爬虫实践。
上一篇: OpenCV: 图片像素读取与写入