爬虫怎么根据一个关键词爬取上千张网络图片

本文的亮点是可以保存通过关键词搜索到的所有图片,而不只是第一页的图片。

 由于公司做训练需要搜集一些图片,所以就开始打算用爬虫自动下载。刚开始是使用

【图文详解】python爬虫实战——5分钟做个图片自动下载器 - 简书


中的程序进行下载。但是感觉不是太好用,每一个关键词最多只能保存60张图片。而我们需要搜集几万张图片,根本不能满足要求。

代码如下:

#-*- coding:utf-8 -*-
import re
import requests



def dowmloadPic(html,keyword,startNum):

    pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
    num = len(pic_url)
    i = startNum
    print('找到关键词:'+keyword+'的图片%d 张,现在开始下载图片...' % num)
    for each in pic_url:
        print('正在下载第'+str(i+1)+'张图片,图片地址:'+str(each))
        try:
            pic= requests.get(each, timeout=10)
            string = 'pictures1/'+keyword+'_'+str(i) + '.jpg'
            #resolve the problem of encode, make sure that chinese name could be store
            fp = open(string,'wb')
            fp.write(pic.content)
            fp.close()
        # except requests.exceptions.ConnectionError:
        except:
            print ('【错误】当前图片无法下载')
            continue

        i += 1

    return i


if __name__ == '__main__':

    lastNum = 0
    words = ['胖人墨镜','墨镜手錶美女','带墨镜帅哥','墨镜中年帅哥','墨镜帅哥画','墨镜小帅哥','海边墨镜帅哥','墨镜帅哥壁纸','90后墨镜帅哥']
 #words为一个列表,可以自动保存多个关键字的图片
  for word in words:
        # word = input("Input key word: ")
        if word.strip() == "exit":
            break
  #关键就在这里,我发现将百度图片选择传统版本(默认是瀑布流版本,只有滑动滑动条,才会看到更多图片。传统版本,就是分页显示,底部可以选择页数)后,图片网址跟页数有一个关系,因此利用该关系就可以自动获取好多页的网址,进行保存图片。
   pageId = 0
  #这里我保存到第50页
   for i in range(50):
            url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + "&pn="+str(pageId)+"&gsm=?&ct=&ic=0&lm=-1&width=0&height=0"
            pageId += 20
            #url = 'https://image.baidu.com/search/index?tn=baiduimage&ie=utf-8&word=%E5%A2%A8%E9%95%9C%E7%94%B7%E4%BA%BA&ct=201326592&ic=0&lm=-1&width=&height=&v=index'
            result = requests.get(url)
            lastNum = dowmloadPic(result.text, 'sunglasses', lastNum)





你可能感兴趣的:(爬取网页图片)