前一篇写了基础的爬虫,这篇我们就来爬图片保存下来。环境如上一篇scrapy 爬电影 抓取数据
Step1
首先还是实体类写好我们需要的字段
注释中ImagesPipeline
后面会解释
1 | 复制代码from scrapy import Item, Field |
Step2
项目结构不变,依然首先来写我们的Spider
1 | 复制代码import scrapy |
上一篇如果你认真看了写了,这一点代码相信你一眼就看懂了。如果不懂先看一下上一篇吧scrapy 爬电影 抓取数据
Step3
上面我们将详情页的图片列表地址存储保存了下来。我们需要一个专门下载每张图片的类。
也就是Step1中提到的ImagesPipeline
。它是用来处理下载图片的一个Pipeline
关于Pipline可以查看Pipeline。我们创建一个PaimgPipeline
类继承自ImagesPipeline
1 | 复制代码class PaimgPipeline(ImagesPipeline): |
我们需要复写四个方法:get_media_requests(进行图片下载请求处理) item_completed(图片下载完成的通知) file_path(下载原始图片的保存路径) thumb_path(缩略图保存路径)
完整代码:
1 | 复制代码headers = { |
Step4
编写随机的UserAgent
和IP代理
1 | 复制代码import random |
1 | 复制代码import random |
Step5
下来我们就需要配置一下settings.py
了。
- 首先我们先把刚刚写的
PaimgPipeline
配置到settings中
1 | 复制代码ITEM_PIPELINES = { |
- 设置上面编写的
RandomUserAgent
及ProxiesMiddleware
1 | 复制代码DOWNLOADER_MIDDLEWARES = { |
- 设置USER_AGENTS,也就是上面我们自己编写
RandomUserAgent
需要的数据
1 | 复制代码USER_AGENTS = [ |
- 设置IPPOOL,也就是上面我们自己编写
ProxiesMiddleware
需要的数据( 代理IP可能会失效 需要重新ping代理ip地址)
1 | 复制代码IPPOOL=[ |
- 设置上面略缩图的大小,有两种方式:
1 | 复制代码IMAGES_THUMBS = { |
- 设置图片(宽最小与高最小)过滤。以防止我们会下载一些广告图或其他无用图
1 | 复制代码IMAGES_MIN_HEIGHT = 110 |
- 设置本地保存路径
1 | 复制代码IMAGES_STORE = '/Users/cuiyang/Pictures/meizitu' |
- 还有我们的延迟下载
1 | 复制代码DOWNLOAD_DELAY = 2 |
基本上这些就已经够了,我们还可以再优化一下配置,也是比较通用的一些配置
Tip
- 减少超时时间以提高爬取速度
1 | 复制代码DOWNLOAD_TIMEOUT = 15 |
- 不对失败的HTTP请求进行重试
1 | 复制代码RETRY_ENABLED = False |
- 禁用cookie
1 | 复制代码COOKIES_ENABLED = False |
- 通用爬取经常抓取大量的 “index” 页面; AjaxCrawlMiddleware能帮助您正确地爬取。 由于有些性能问题,且对于特定爬虫没有什么意义,该中间默认关闭。
1 | 复制代码AJAXCRAWL_ENABLED = False |
最后附上源码地址:源码地址
本文转载自: 掘金