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

前言

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

一、说明

我们批量获取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)

六、效果展示

在这里插入图片描述

功能介绍:  为网页编程人员提供能够自动生成验证码图像并验证网页访问者输入的Web控件,具体功能如下:1. 提供简单易用的设计时所见即所得的可视化设置方式,并且支持设计时验证码图像效果与特效属性设置的实时联动体现,极大地提高程序员的工作效率;2. 对验证码图像的包括残影、打散、风化、旋转、斜变等多种图形学图像处理特效以及对各种特效的三个程度等级的灵活控制能力,让程序员在轻松应对基于OCR的恶意识别攻击的情况下,还能有充分的余地考虑验证码图像外观的美化问题;3. 提供灵活的中文诗词、中文单字、英文大小写字母、阿拉伯数字等丰富的验证码生成字源混合控制以及对于字数和字体的自定义控制,让程序员在面对不同客户以及网页访问者的特殊要求的同时仍能从容兼顾良好的用户体验;4. 保留对抗OCR的经典的点、线干扰特效以及三个程度等级的灵活控制,并采用色调匹配技术在保证原有的OCR对抗效果的同时加入了更加美观的彩色点、线效果,留给程序员更多的选择;5. 无刷新页面验证。更好地适用于需要填写大量信息的页面验证,有效地避免由于因突发性网络原因导致的验证码图像的无法下载,而使网页用户必须刷新页面而重填其它信息的窘境。运行环境:1. Microsoft Windows XP Professional2. Microsoft Visual Studio 20053. Microsoft .NET Framework V2.04. Microsoft Internet Information Services (IIS) V5.1(注意在子安装选项中选中FrontPage 2000服务器扩展)常见问答:1. 如何将本控件添加到Microsoft Visual Studio 2005的IDE中?a) 在Microsoft Visual Studio 2005中打开源代码的工程文件,重新编译,生成vcg.dll;b) 在工具箱(Toolbox)面板上单击右键,选择Choose Items…菜单,在弹出来的Choose ToolBox Items属性面板中,点击Browse…找到并选定vcg.dll控件。该控件即被添加到工具箱;2. 如何使用本控件?a) 确认需要添加本控件的网页为aspx页面。在IIS管理器中将网站属性的ASP.NET version选中为2.0,并在网站虚拟目录属性的“安全”选项卡中添加ASP.NET用户,赋予写入权限;b) 在Microsoft Visual Studio 2005中打开相应的网站,并打开相应的aspx页面文件(在本文中以Default.aspx为例),进入Design编辑模式;c) 从工具箱将之前添加的vcg控件拖到Default.aspx页面上。此时页面上的拖放位置应该出现一个带有文字内容的图片框,说明vcg控件已经被正确添加到页面;d) 现在可以像修改其它标准控件一样通过鼠标对控件进行拖动、缩放等修改,还可以在属性栏对控件进行进一步的细节设置。主要包括针对验证码图像的特效控制和针对验证码本身的文字控制两个方面。具体内容请参考本控件的使用手册;e) 在Default.aspx中新增Web控件Button:btnValidate,作为验证促发;在Default.aspx中新增Web控件TextBox:textCode,作为验证码输入;在Default.aspx中新增Web控件Lable:lblMessage,作为验证结果输出;f) 在Default.aspx.cs中添加验证函数:protected void btnValidate_Click(object sender, EventArgs e){ string code = “”; try { //真正的验证码存储在Session[“Code”]中,需要的只是对验证码输入和该值进行比较。 //(如果属性栏中“文字控制”属性卡下的“SessionCode”默认属性值“Code”改变, //则在代码中的Session[”Code”]中引号内的值也必须手工修改成与属性值一致的字符串。) code = Session[”Code”].ToString(); } catch (Exception ex
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oax_knud

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值