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 item
scrapy非常强大, 几句代码就能完成图片的抓取下载.
下面附上一个用Scrapy 下载图片的例子源码 :
关键字词: