scrapy爬取图片并保存

本文介绍如何使用Scrapy框架的自定义Pipeline来下载并保存网页中的图片,详细解释了DownloadImagesPipeline类的方法,包括get_media_requests和file_path,以及图片下载后的处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 通过item中的url下载并保存图片

from scrapy import Request
class DownloadImagesPipeline(ImagesPipeline):
    def get_media_requests(self, item, info):  # 下载图片
        print(item)
        for image_url in item['img']:
            yield Request(image_url,
                          meta={'item': item,
                                #'index': item['image'].index(image_url)
                                })  # 添加meta是为了下面使用

    def file_path(self, request, response=None, info=None):
        item = request.meta['item']  # 通过上面的meta传递过来item
       # index = request.meta['index']  # 通过上面的index传递过来列表中当前下载图片的下标

        # 图片文件名request.url.split('/')[-1]
        image_guid = request.url.split('/')[-1]
        # settings设置的IMAGES_STORE  +  路径/文件名
        filename = '/{0}/{1}'.format(item['title'], image_guid)
        return filename
 
    #图片下载完毕后这个方法会被调用
    def item_completed(self, results, item, info):
        if isinstance(item, PhotoItem):
            image_paths = [x['path'] for ok, x in results if ok] # results=[(True, {'url': '...', 'path': '/.../1.jpg', 'checksum':'03d68f6ab9559687f801168609e7b336'}),]
            if not image_paths:
                print('item contains no images')
            else:
                #设置图片保存的路径供后续使用
                item['image_paths'] = image_paths
                return item
        else:
            return item

settings中配置

# ImagePipeline的自定义实现类
ITEM_PIPELINES = {
    'photo.pipelines.DownloadImagesPipeline':301,
}
#设置图片下载路径
IMAGES_STORE='F:\picture'
# 过期天数
IMAGES_EXPIRES = 90  #90天内抓取的都不会被重抓,可不设置

 

您好!对于使用Scrapy爬取图片保存的问题,您可以按照以下步骤进行操作: 1. 首先,确保您已经安装了Scrapy库。如果没有安装,可以通过以下命令进行安装: ``` pip install scrapy ``` 2. 创建一个新的Scrapy项目。在命令行中使用以下命令: ``` scrapy startproject project_name ``` 这将在当前目录下创建一个名为 "project_name" 的新项目文件夹。 3. 进入项目文件夹,创建一个新的Spider。在命令行中使用以下命令: ``` cd project_name scrapy genspider spider_name example.com ``` 这将在项目中创建一个名为 "spider_name" 的新Spider,用于定义爬取网页的规则。 4. 打开生成的Spider代码文件(位于 "project_name/spiders/spider_name.py"),添加以下代码: ```python import scrapy class MySpider(scrapy.Spider): name = 'spider_name' start_urls = ['http://www.example.com'] # 要爬取的起始URL def parse(self, response): # 在这里编写解析响应数据的代码 # 提取图片URL发送请求进行下载 for img_url in response.css('img::attr(src)').getall(): yield scrapy.Request(url=response.urljoin(img_url), callback=self.save_image) def save_image(self, response): # 获取图片保存路径 image_path = 'path/to/save/image.jpg' # 根据需求自定义保存路径和文件名 # 保存图片 with open(image_path, 'wb') as f: f.write(response.body) ``` 在上述代码中,我们定义了一个Spider类,包含了起始URL和解析响应数据的方法。在parse方法中,我们使用CSS选择器提取图片的URL,使用scrapy.Request发送请求进行下载。下载后的图片会通过save_image方法保存到本地。 5. 运行虫。在命令行中使用以下命令: ``` scrapy crawl spider_name ``` 这将启动开始爬取网页上的图片。下载的图片保存在您指定的路径下。 请注意,上述代码只是一个简单示例,您可能需要根据具体的网页结构和需求进行相应的修改。另外,确保您遵守网站的爬取规则尊重版权。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值