前言
平时喜欢到汽车之家看车,也喜欢收藏汽车模型。这次使用爬虫把汽车之家某网页的图片保存到电脑。本文章仅供学习!
程序运行结果
预览
网址分析
随机选择一张图片右键点击检查(审查元素)
选择img标签的属性src,访问图片。
所看到的图片比例为480×360,清晰度不是很高,所有我们点击图片查看高清图片
同样右键图片,找到图片的地址,访问图片
显然,图片的清晰度明显比480×360的高很多。我们对比一下这两张图片的网址
https://car3.autoimg.cn/cardfs/product/g24/M07/B2/E0/480x360_0_q95_c42_autohomecar__Chtk3WDIiCGAPFsDABX1wkXD-AQ908.jpg
https://car3.autoimg.cn/cardfs/product/g24/M07/B2/E0/1024x0_1_q95_autohomecar__Chtk3WDIiCGAPFsDABX1wkXD-AQ908.jpg
显然两者之间的差异在于_autohomecar__Chtk3WDIiCGAPFsDABX1wkXD-AQ908.jpg
前的480x360_0_q95_c42
和1024x0_1_q95
,也就是将低分辨率的图片地址的480x360_0_q95_c42
改为1024x0_1_q95
就可以访问高分辨率的图片。
下面我们使用代码来实现自动保存当前页面的所有高分辨率的汽车模型。
前期准备
Python == 3.8.5
BeautifulSoup
代码实现
"""
爬取汽车之家某品牌汽车的第一页图片
"""
import requests
from bs4 import BeautifulSoup
import os
class Spider:
def __init__(self, url, data_dir):
self.data_dir = data_dir # 图片存储目录
self.url = url # 爬虫目标网址
self.img_urls = [] # 图片地址数组
self.soup = BeautifulSoup(requests.get(url=url).text, 'lxml')
if os.path.exists(data_dir):
os.removedirs(data_dir)
os.makedirs(data_dir)
print('创建文件夹', data_dir)
def get_img_url(self):
imgUrl = self.soup.find_all('img')
for img in imgUrl:
src = img.get('src')
# 将当前页面下爬取得到的图片的地址更改为高分辨率的图片地址
src = str(src).replace('480x360_0_q95_c42_', '1024x0_1_q95_')
if src.find('1024x0_1_q95_') == -1:
# 若不存在高分辨率的图片,则弃存
continue
self.img_urls.append(src)
def save_img(self):
i = 0
for src in self.img_urls:
img_name = '%d.jpg'%(i)
# src的值为 //car3.autoimg.cn/cardfs/product/g24/M07/B2/E0/xxx.jpg 因此需要加上http:才能被访问
src = 'http:' + src
content = requests.get(src).content
with open(os.path.join(data_dir, img_name), 'wb') as f:
f.write(content)
f.close()
print('成功保存%d.jpg'%(i))
i += 1
if __name__ == '__main__':
url = 'https://car.autohome.com.cn/pic/series/4171-1.html'
data_dir = os.path.split(url)[-1] # 即在当前目录下创建4171-1.html文件夹,图片将保存在里面
s = Spider(url = url , data_dir = data_dir)
s.get_img_url()
s.save_img()
pass
【注】
我们在保存网址图片的时候,可以先获取图片的内容信息使用变量存储content = requests.get(src).content
(),再新建文件写入信息
with open('../路径/文件名称.后缀', 'wb') as f:
f.write(content)
f.close()