scrapy框架爬取图片保存到本地或mongodb的写法

一、爬取分类图片 并分类保存本地的写法。

1、用scrapy 爬取图片的思想。我们一定要找到图片的下载地址即src,第二我们还要找到图片分类标题作为我们的文件夹的名字。

(1)首先我们在spider文件夹中,找到我们的文件名

            sucai = SucaiItem()
            sucai['img_url'] = [img_url]  # 图片的下载地址,即src,
            print(sucai['img_url'][0])
            sucai['img_path'] = response.meta['img_path']  # 图片的保存路径名字,即图片的文件夹名字

            yield sucai

(2)我们在 pipelines 中重写我们的方法。

from scrapy.http import Request
from scrapy.pipelines.images import ImagesPipeline


class SucaiPipeline(ImagesPipeline):  # 这里是继承了我们的父类 ImagesPipeline
    def get_media_requests(self, item, info):
        # 从item中获取要下载图片的url,根据url构造Request()对象,并返回该对象
        image_url = item['image_url'][0]  # 从item中获取我们的 图片地址 image_url,并取出来. 因为在我们的文件中这个列表.
        yield Request(image_url, meta={'item': item})  # 因为 yield出的 item是一个字典,我们要取出出来 并yield出去

    def file_path(self, request, response=None, info=None):
        # 用来自定义图片的下载路径
        item = request.meta['item']  # 请求并取出item的
        img_path = item['img_path']  # 取出item字典中的 文件夹的文字 作为我们的储存路径.
        url = item['image_url'][0].split('/')[-1]  # 取出截取 图片的名字
        path = img_path + '/' + url  # 拼接路径
        return path  # 返回

    def item_completed(self, results, item, info):
        print(results)
        return item

(3)settings 中的配置,有两个地方要改,第一个是 ITEM_PIPELINES,第二是我们配置保存 我们图片的路径和图片的url

# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
   'scrapy.pipelines.images.ImagesPipeline': None,  # 这是执行父类 ImagesPipeline
   'SuCai.pipelines.SucaiPipeline': 300,  # 这是执行我们自定义的 Pipeline
}

IMAGES_STORE = 'imgs'  # 这是我们总文件夹的的名字,翻译 图像存储器
IMAGE_URL_FIRLD = 'img_url'  # 这是我们图片的下载地址 

(4)运行一下,我们的的图片就保存好了


二、将图片保存到mongodb中。

将图片保存到mongodb中的写法跟保存数据的写法差不多。

import pymongo
class SaveMongoPipeline(object):
    def process_item(self, item, spider):
        # 参数1 {'zmmc': item['zmmc']}: 用于查询表中是否已经存在zmmc对应的documents文档。
        # 参数3 True: 更新(True)还是插入(False, insert_one())
        # 参数2 要保存或者更新的数据
        self.db['sucai'].update_one({'image_url': item['image_url']}, {'$set': dict(item)}, True)

    def open_spider(self, spider):
        self.client = pymongo.MongoClient('localhost')
        self.db = self.client['sucai']

猜你喜欢

转载自blog.csdn.net/qq_42336581/article/details/80978218