Scrapy图片分类异步下载

本文介绍了Scrapy的ImagesPipeline流程,详细讲解了如何通过自定义图片类实现图片的异步下载。在spider中获取图片链接,通过pipeline进行处理,ImagesPipeline检查image_urls字段并发送请求给调度器和下载器。下载完成后,结果会被写入item的images字段。重点讨论了get_media_requests、file_path和item_completed三个关键函数的重写,以及图片的存储路径设置。
摘要由CSDN通过智能技术生成

可在pipeline中自定义一个图片类来继承Scrapy的图片类(ImagesPipeline[可以实现异步下载]),并重写ImagesPipeline的方法,来实现图片的异步下载

Scrapy的ImagesPipeline流程

  1. 在spider中爬取需要下载的图片链接,将其放入item中的image_urls.
  2. spider将其传送到pipieline
  3. 当ImagePipeline处理时,它会检测是否有image_urls字段,如果有的话,会将url传递给scrapy调度器和下载器
  4. 下载完成后会将结果写入item的另一个字段images,images包含了图片的本地路径,图片校验,和图片的url。

图片异步下载的实现

  1. 打开ITEM_PIPELINES(定义新建的TeacherPipeline管道)
ITEM_PIPELINES = {
   
    #'car.pipelines.CarPipeline':300,
    'car.pipelines.CarImgPipeline':1,
}
  1. 设置图片的保存路径(变量名称必须为IMAGES_STORE,否则无法识别)

大多数如下:

IMAGES_STORE=os.path.join(os.path.dirname(os.path.dirname(__file__)),'images')
  1. 定义item
class CarItem(scrapy.Item):
    # define the fields for your item here like(类似于字典的映射,避免字典时输入值出错)
    # name = scrapy.Field()
    title=scrapy.Field()
    link=scrapy.Field()
    images_urls=scrapy.Field()
    pass
  1. 编写spider
class CarsSpider(scrapy.Spider):
    name = 'cars'
    allowed_domains = ['car.autohome.com.cn']
    start_urls = ['https://car.autohome.com.cn/pic/series/65.html#pvareaid=2042214']

    def parse(self, response):
        links=response.xpath("//div[@class='row'][5]/div/div[@class='uibox']")
        for i in range(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scrapy是一个强大的Python爬虫框架,可以用于抓取网页数据。在Scrapy中,可以使用自定义的Pipeline来实现图片下载功能。 首先,你需要在Scrapy项目中创建一个自定义的Pipeline来处理图片下载。在该Pipeline中,你可以使用Python的requests库或者Scrapy提供的内置函数来下载图片。 以下是一个简单的示例代码,展示了如何在Scrapy中实现图片下载功能: ```python import scrapy from scrapy.pipelines.images import ImagesPipeline class MyImagesPipeline(ImagesPipeline): def get_media_requests(self, item, info): for image_url in item['image_urls']: yield scrapy.Request(image_url) def file_path(self, request, response=None, info=None): # 自定义图片保存路径 image_guid = request.url.split('/')[-1] return 'images/%s' % (image_guid) ``` 在上述代码中,`get_media_requests`方法用于获取要下载图片URL,并通过`yield`关键字将其传递给Scrapy引擎进行下载。`file_path`方法用于指定图片保存的路径。 接下来,在你的Scrapy项目的settings.py文件中,将自定义的Pipeline添加到ITEM_PIPELINES配置项中: ```python ITEM_PIPELINES = { 'your_project_name.pipelines.MyImagesPipeline': 1, # 其他的Pipeline... } ``` 最后,在你的Spider中,将需要下载图片的URL添加到item中,并在item中定义一个字段来存储这些URL: ```python import scrapy class MySpider(scrapy.Spider): name = 'my_spider' def start_requests(self): # 构造请求并发送给Scrapy引擎 yield scrapy.Request(url='http://example.com', callback=self.parse) def parse(self, response): # 解析网页内容,提取图片URL并存储到item中 item = {} item['image_urls'] = response.css('img::attr(src)').getall() yield item ``` 在上述代码中,`parse`方法中使用了CSS选择器来提取网页中的图片URL,并将其存储到item的`image_urls`字段中。 这样,当你运行Scrapy爬虫时,图片将会被下载并保存到指定的路径中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值