前言
当前对版权保护日益严格,因此在此说明获取的图像仅做研究和个人学习使用,禁止用作商用目的。
一、说明
我们批量获取VCG图片,在这里,我以关键词迪士尼为例进行代码分析。进入VCG官网(https://www.vcg.com/),我们搜索迪士尼,然后进入到此页面(https://www.vcg.com/creative-image/dishini/)。在接下来的过程中,我们将对VCG中迪士尼的每一页图片进行获取并保存本地。
二、获取网页路径
通过切换页面,我们可以发现,对于每一页图片,他们的路径具有一定规律。如下所示:
https://www.vcg.com/creative-image/dishini/page=1
https://www.vcg.com/creative-image/dishini/?page=2
https://www.vcg.com/creative-image/dishini/?page=3
https://www.vcg.com/creative-image/dishini/?page=4
...
https://www.vcg.com/creative-image/dishini/?page=11
由此,我们可以看出,对于每一页图片网页,他们在page参数存在不同。
在这里,我们通过get_request函数构建对网页的请求对象,get_content函数获取每一页的网页原码。
def get_request(page):
url="https://www.vcg.com/creative-image/dishini/?page="+str(page)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36"
}
request=urllib.request.Request(url=url,headers=headers)
return request
def get_content(request):
response=urllib.request.urlopen(request)
content=response.read().decode("utf-8")
return content
三、获取图片下载URL
用谷歌浏览器,进入检查页面,查找每一张图片的URL,我们发现,在img属性中,存在图片路径,我们依次尝试进入这些路径,最后,我们选择data-src中的路径作为我们下载的路径。
我们进入data-src路径(举例:迪士尼图片下载连接)可以得到图片预览效果,如下图所示:
为获取每一页所有图片下载地址,我们使用谷歌浏览器的xpath helper进行提取。
通过检查中的网页原码,我们获取网页属性的层次关系。在这里,我们以第一页为例,输入xpath查询语句,我们可以获取127个第一页图片的下载路径。
在这里,我们构建download_img函数下载图片。将谷歌浏览器xpath插件中的查询语句输入tree.xpath中。(由于xpath获取的路径形式为://alifei03.cfp.cn/creative/vcg/nowarter800/new/VCG211191239710.jpg,缺少https,因此在图片下载路径中我们需要添加https:)
def download_img(content,page):
tree=etree.HTML(content)
src_list=tree.xpath('//div[@id="root"]//div[@class="gallery_inner"]//figure/a/img/@data-src')
dictionary = str(page)
i=1
for src in src_list:
save_url = "E:/VCG迪士尼图片批量下载/" + dictionary + "/" + str(i) + ".jpg"
new_src="https:"+src
urllib.request.urlretrieve(new_src,save_url)
print("第"+str(page)+"页第"+str(i)+"张图片下载完成!")
i=i+1
四、批量下载图片
在main函数中,我们确定图片批量下载页数,并
if __name__=='__main__':
start_page=1
end_page=3
for page in range(start_page,end_page+1):
#获取请求request
request=get_request(page)
print("获取第"+str(page)+"页请求!")
#获取页面原码
content=get_content(request)
print("获取第" + str(page) + "页网页原码!")
download_img(content,page)
五、完整代码
import urllib.request
from lxml import etree
def get_request(page):
url="https://www.vcg.com/creative-image/dishini/?page="+str(page)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36"
}
request=urllib.request.Request(url=url,headers=headers)
return request
def get_content(request):
response=urllib.request.urlopen(request)
content=response.read().decode("utf-8")
return content
def download_img(content,page):
tree=etree.HTML(content)
src_list=tree.xpath('//div[@id="root"]//div[@class="gallery_inner"]//figure/a/img/@data-src')
dictionary = str(page)
i=1
for src in src_list:
save_url = "E:/VCG迪士尼图片批量下载/" + dictionary + "/" + str(i) + ".jpg"
new_src="https:"+src
urllib.request.urlretrieve(new_src,save_url)
print("第"+str(page)+"页第"+str(i)+"张图片下载完成!")
i=i+1
if __name__=='__main__':
start_page=1
end_page=2
for page in range(start_page,end_page+1):
#获取请求request
request=get_request(page)
print("获取第"+str(page)+"页请求!")
#获取页面原码
content=get_content(request)
print("获取第" + str(page) + "页网页原码!")
download_img(content,page)