栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python爬虫实战:批量获取VCG图片

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python爬虫实战:批量获取VCG图片

文章目录
  • 前言
  • 一、说明
  • 二、获取网页路径
  • 三、获取图片下载URL
  • 四、批量下载图片
  • 五、完整代码
  • 六、效果展示

前言

当前对版权保护日益严格,因此在此说明获取的图像仅做研究和个人学习使用,禁止用作商用目的。

一、说明

我们批量获取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[@]//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[@]//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)
六、效果展示

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/302461.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号