@TOC
本文分享一个爬虫案例,使用requests库爬取彼岸网中的动物的图片,利用parsel库进行数据解析,并把这些照片保存到本地。后续也会接着分享使用第三方库selenium篇和DrissionPage篇爬取图片。
确定要爬取的目标网站后要先发起请求,我们要发送请求需要依赖requests库,爬虫实质上是模拟浏览器的行为,所以还要加上模拟浏览器的标识,即下面headers中的Users-Agent。代码如下:
import requesets # 数据请求模块
# 请求url
url='https://pic.netbian.com/e/search/result/?searchid=147'
# 请求头 Users-Agent为浏览器的标识
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'
}发送请求我们会的获得响应的数据,下面我们就要对数据内容进行分析。
获取到的数据常见的格式有json、text(HTML文本)和XML格式。
还有后面获取到的图片是二进制(content)格式的数据。
# 获取响应数据
response = requests.get(url, headers=headers).text解析数据有很多种方式,常用的包括但不限于xpath,正则表达式,lxml,Beautiful Soup等等,今天我们来用一下第三方库parsel。
使用parsel库首先需要创建一个Selector对象,然后利用css选择器来解析其中照片数据。
parsel库支持Xpath、css选择器以及正则表达式来提取数据。不了解parsel库的语法的同学可以先去了解下。
selector=parsel.Selector(response.text) # 创建一个个Selector对象
data_li=selector.css('.slist ul li') # 利用css选择器提取图片的数据
for li in data_li: # 遍历
img_src=li.css('a img::attr(src)').get() # 每个图片的网址
title=li.css('a b::text').get() # 图片的的名字
title=title.replace(' ','').replace("*",'-') # 把其中的空格和特殊字符*替换掉
de_src='https://pic.netbian.com'+img_src # 完整的图片地址利用第三方库parsel的css选择器获取到数据后,我们就需要存储数据了。可以存储到到excel表格中,也可以存储到数据库中,我们这次先存储到本地。
img_data=requests.get(de_src,headers=headers).content # 获取图片的二进制数据
with open('./images/'+title+'.jpg','wb') as f: # 存储到本地
f.write(img_data)import requests # 数据请求模块
import parsel # 数据解析模块
import os # 文件管理模块
import re # 正则表达式模块
# 请求头
url='https://pic.netbian.com/e/search/result/?searchid=147'
# 请求体
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'
}
# 使用os库创建目录images
if not os.path.exists('./images'):
os.mkdir('./images')
res=0 # 计算爬取到的总的照片数
for num in range(0,15): # 多页爬取 爬取15页
url=f'https://pic.netbian.com/e/search/result/index.php?page={num}&searchid=147'
response = requests.get(url, headers=headers) # 获取请求内容
selector=parsel.Selector(response.text) # 创建一个个Selector对象
data_li=selector.css('.slist ul li') # 利用css标签提取照片的数据
for li in data_li:
img_src=li.css('a img::attr(src)').get() # 照片的网址
title=li.css('a b::text').get() # 照片的的名字
title=title.replace(' ','').replace("*",'-') # 把其中的空格和特殊字符*替换掉
de_src='https://pic.netbian.com'+img_src
img_data=requests.get(de_src,headers=headers).content # 获取图片的二进制数据
with open('./images/'+title+'.jpg','wb') as f: # 保存到本地
f.write(img_data)
print("已下载:",title,"网址为:",de_src)
res+=1
print(f'第{num}页爬取完成')
print(f'共爬取{res}张')

如果凌晨五点的日出你赶不上,不妨去看看傍晚六点的夕阳!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。