Python使用Scrapy 来抓取网页图片非常简单.
Scrapy为下载item中包含的文件(比如在爬取到产品时,同时也想保存对应的图片)提供了一个可重用的 item pipelines . 这些pipeline有些共同的方法和结构(我们称之为media pipeline)。
一般来说你会使用Files Pipeline或者 Images Pipeline.
以下载图片为例:
启用 Images Pipeline, 在setting文件中使用:
ITEM_PIPELINES = {'scrapy.pipeline.images.ImagesPipeline': 1}设置图片保存目录:
IMAGES_STORE = '/path/to/valid/dir'
定义Item:
import scrapyclass MyItem(scrapy.Item): # ... other item fields ... image_urls = scrapy.Field() images = scrapy.Field()
编写Pipeline:
import scrapy
from scrapy.pipeline.images import ImagesPipeline
from scrapy.exceptions import DropItem
class MyImagesPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
for image_url in item['image_urls']:
yield scrapy.Request(image_url)
def item_completed(self, results, item, info):
image_paths = [x['path'] for ok, x in results if ok]
if not image_paths:
raise DropItem("Item contains no images")
item['image_paths'] = image_paths
return itemscrapy非常强大, 几句代码就能完成图片的抓取下载.
下面附上一个用Scrapy 下载图片的例子源码 :
关键字词:

