python——爬取图片(shutter图片网)

在本爬虫程序中共有三个模块:

1、爬虫调度端:启动爬虫,停止爬虫,监视爬虫的运行情况

2、爬虫模块:包含三个小模块,URL管理器、网页下载器、网页解析器。

(1)URL管理器:对需要爬取的URL和已经爬取过的URL进行管理,可以从URL管理器中取出一个待爬取的URL,传递给网页下载器。

(2)网页下载器:网页下载器将URL指定的网页下载下来,存储成一个字符串,传递给网页解析器。

(3)网页解析器:网页解析器解析传递的字符串,解析器不仅可以解析出需要爬取的数据,而且还可以解析出每一个网页指向其他网页的URL,这些URL被解析出来会补充进URL管理器

3、数据输出模块:存储爬取的图片

具体思路就是根据正则表达式,找到url,然后完成下载。

设计环境

IDESublime Text3

Python版本:python3.7

目标分析

目标:从https://www.shutterstock.com/zh/search/开始,爬取多个类别的前十张图片

(1)初始URL"https://www.shutterstock.com/zh/search/"

(2)词条页面URL格式:

https://www.shutterstock.com/zh/search?searchterm=Architecture&image_type=photo

(3)找到backgrounds,Architecture,business,kids,food,portrait,flowers,travel等类别标签名

代码如下:

 import requests
import re
import urllib.request
import time

headers = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}

url_base = 'https://www.shutterstock.com/zh/search/'
imge_list = []

for i in ['backgrounds','Architecture','business','kids','food','portrait','flowers','travel','skyline']:
    url = url_base+i+'?image_type=photo'

    res = requests.get(url,headers= headers).text
    
    # 为图片生成缩略图
    #"thumbnail":"(.*?)",
    cop = re.compile('"thumbnail":"(.*?)",',re.S)
    result = re.findall(cop,res)[:10]
    for each in result:
        filename = each.split('/')[-1]
        #imge_list.append(each) #[90]

        response = urllib.request.urlopen(each)
        img = response.read()
        with open(filename,'wb')as f:
            f.write(img)
        print("已下载:",each)

        time.sleep(5) # 休眠五秒

print("下载结束")

结果:

遇到的问题


(1)爬取几张图片后,没有产生新的图片。原因:因为是外国网站,访问次数过多,会被限制访问。
解决方法:设置sleep函数,休眠几秒继续访问。


(2)英文页面不要随便翻译,会使源码标签显示错误!
解决方法:确认浏览器是否自动翻译过,可以获取一下他的页面,然后找想要的标签,不存在,则有两种情况,动态或者被翻译过。

猜你喜欢

转载自www.cnblogs.com/yezishen/p/12079321.html