Python爬虫——按照关键词爬取视觉中国高清图像

当前对版权保护日益严格,因此在此说明爬取的图像仅做研究和个人使用,禁止用作商用目的。
该爬虫方法可应用到其它允许爬虫的网址

查看网页源代码寻找高清图像链接

以关键词明星为例,搜索后的网址为 https://www.vcg.com/creative/search?phrase=明星
在chrome下ctrl+u或者右键查看源代码,搜索.jpp会找到很多图片的网址,经查验,最高清的图像链接格式为:“url800”:“图像网址”,即在源代码的最后,见下图.
网页源代码中高清图片的位置

程序示例

Step 1 导入必要Python包

from urllib import request
import os
import re #正则表达式库

Step 2 定义保存路径函数

#输入类别名称,子类别名称,文件名,输出图片路径
def get_path(classname,subclassname,filename):
    #获取当前工作路径
    cwd = os.getcwd()
    #获取图像的保存目录
    dir_path = cwd+'/vcg_test/' + classname +'/'+ subclassname
    #目录是否存在,不存在则创建目录
    if os.path.exists(dir_path):
        pass
    else:
        os.makedirs(dir_path)
    #获取图像的绝对路径
    file_path = dir_path +'/'+ filename
    return file_path

Step 3 按照关键词爬取图片

假设我们希望爬取“明星”和“动漫人物”两种关键词下的图片,我们希望爬取的图片中仅有一个人方便使用,则代码如下:

classnames = ['super_star','cartoon'] #假设我们分类是明星和动漫人物
keypoints = ['%E6%98%8E%E6%98%9F','%E5%8A%A8%E6%BC%AB%E4%BA%BA%E7%89%A9'] #关键字对应
gender_file_path = ['male','female'] #对于人的分类检索可以按性别筛选
all_page = 35 #想要下载的总页数,其中每页与检索相同,为100张
for class_index, phrase in enumerate(classnames):
    sum_all_num = 0
    if class_index >= 0  : #从某一类断开则选择该类为起始点 
   # if class_index == 1  : #例如下载动漫人物时被服务器Kill掉可以改为该行继续下载 
      for gender_index,gender in enumerate(gender_file_path):
        if gender_index >= 0 : #从性别某类断开则选择该类为起始点 
          for page in range(1,all_page+1):
            num_in_page = 1
            #获得url链接,这里额外增加了筛选条件:图片中仅有一个人
            url = 'https://www.vcg.com/creative/search?phrase=' + keypoints[class_index] +'&creativePeopleNum=2&creativeGender=' +str(gender_index+1)+'&page='+str(page)
            header = {
                'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36',
#                'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6' 
             }    
            req = request.Request(url=url,headers=header)
            openhtml = request.urlopen(req).read().decode('utf8')   


            #正则表达式
            com = re.compile('"url800":.*?/creative/.*?.jpg"')
    
            # 匹配URl地址
            urladds = com.findall(openhtml)
            for urladd in urladds:
            #try ... except防止匹配出错后程序停止
              try:
                add = 'http:'+urladd.strip('"url800":')  
                #获取文件名称,格式:vcg+性别+获取方式+page+page中的第几张图片,vcg_raw代表原vcg网站对性别分类
                filename = classnames[class_index]+'_'+gender_file_path[gender_index]+'_vcg_raw_page'+str(page)+'_'+str(num_in_page)+'.jpg'
                path = get_path(classnames[class_index],gender_file_path[gender_index],filename)
                print('当前下载...',filename)
                
                dom = request.urlopen(add).read()
                with open(path,'wb') as f:
                    f.write(dom)
                    sum_all_num += 1
                    num_in_page += 1
              except:
                print('当前该任务总共总共下载:',sum_all_num) #监控进度
              if sum_all_num % 50 == 0: #监控进度
                print('当前该任务总共下载:',sum_all_num)

Step 4 查看爬取图像的质量

单张图片约100kb左右,尺寸约800*533.
由于未获取图片版权,因此就不展示爬取的图片了.

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
这是视觉中国官方(shijue.me)提供的扩展,可以让你浏览网站时方便分享或收藏喜欢的图片,扩展提供了鼠标右键单击分享、网页截图到视觉中国(shijue.me)上的快捷功能。 视觉中国图片分享工具 这是视觉中国官方(shijue.me)提供的扩展,可以让你浏览网站时方便分享或收藏喜欢的图片,扩展提供了鼠标右键单击分享、网页截图到视觉中国(shijue.me)上的快捷功能。 “shijue.me 视觉中国”是中国最具活力的视觉图片分享社区及创意设计产品社会化电商平台。依托独特的创意生态理论,为原创者和消费者提供一个互动沟通的社区,发现原创、发现美丽,收获并分享美好的创意体验。 秉承了优质的创意资源和纯正的社区血脉,全新的“shijue.me 视觉中国”愿意和您一起,用创意和想象力,重新发现一个美丽的新世界! 这里是一个关于灵感和创意的好玩的全栖互动社区,你可以在里: 分享好看的图片找到品味同好、发表原创的作品获得更多成名的机会、编辑精彩的内容和大家分享你的奇闻乐事;上传你的奇思妙想,便可以在这里找到从前期到最终、从灵感到最终的盈利的所有通经,我们帮你将它变成商品,并通过为你铺设好的渠道实现盈利;你可以买到充满创意的原创产品,并可以和它的设计师进行互动;你还可以在这里找到很多趣味相投的朋友,组合线下聚会活动;这里更是一个显现企业和品牌形象的地方。总之只要是和视觉、创意有关的想法,都可以在这里找到归属! == cvshare - 1.0.5 released 2012/11/04 - 修复标签分享,重复的bug. == cvshare - 1.0.4 released 2012/10/22 - 修复截图分享,URL编码bug - 新增截图分享后,查看按钮功能 == cvshare - 1.0.0 released 2012/10/20 - 鼠标右键分享功能 - 网页标签分享功能 - 多(组)图分享功能 - 网页可视区域、区域选择、整个网页截图分享功能 支持语言:English,中文 (简体)
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值