主页 > 编程资料 > Python >
发布时间:2018-09-06 作者:apizl 阅读:476次

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 下载图片的例子源码 :


scrapy 抓取妹子图片源码

关键字词: