博客
关于我
使用scrapy ImagesPipeline爬取图片资源
阅读量:601 次
发布时间:2019-03-12

本文共 3635 字,大约阅读时间需要 12 分钟。

scrapy项目实例:使用ImagesPipeline爬取Douban图片

创建项目步骤

  • 初始化项目

    运行以下命令创建Scrapy项目:

    scrapy startproject DoubanImgscd DoubanImgsscrapy genspider download_douban douban.com
  • 生成Spider脚本

    打开spiders/download_douban.py,以下是核心代码逻辑:

  • from scrapy.spiders import Spiderfrom scrapy import Requestfrom ..items import DoubanImgsItemclass download_douban(Spider):    name = 'download_douban'    default_headers = {        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',        'Accept-Encoding': 'gzip, deflate, sdch, br',        'Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6',        'Cache-Control': 'max-age=0',        'Connection': 'keep-alive',        'Host': 'www.douban.com',        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36',    }        def __init__(self, url='1638835355', *args, **kwargs):        self.allowed_domains = ['douban.com']        self.start_urls = []        for i in range(23):            if i == 0:                page_url = f'http://www.douban.com/photos/album/{url}'            else:                page_url = f'http://www.douban.com/photos/album/{url}/{i*18}'            self.start_urls.append(page_url)        self.url = url    def start_requests(self):        for url in self.start_urls:            yield Request(                url=url,                headers=self.default_headers,                callback=self.parse            )    def parse(self, response):        list_imgs = response.xpath('//div[@class="photolst clearfix"]//img/@src').extract()        if list_imgs:            item = DoubanImgsItem()            item['image_urls'] = list_imgs            yield item

    项目设置

    编辑DoubanImgs/settings.py,如以下所示:

    # -*- coding: utf-8 -*-BOT_NAME = 'DoubanImgs'SPIDER_MODULES = ['DoubanImgs.spiders']NEWSPIDER_MODULE = 'DoubanImgs.spiders'ITEM_PIPELINES = {    'DoubanImgs.pipelines.DoubanImgDownloadPipeline': 300,}IMAGES_STORE = '.'  # 图片存储路径默认为项目目录IMAGES_EXPIRES = 90  # 图片缓存时间设置HTTPCACHE_ENABLED = True  # 启用HTTP缓存# HTTPCACHE_DIR = 'httpcache'  # 可根据需要调整缓存目录

    数据模型

    DoubanImgs/items.py

    # -*- coding: utf-8 -*-from scrapy import Fieldclass DoubanImgsItem(scrapy.Item):    image_urls = Field()  # 存储图片的URL    images = Field()     # 下载后的图片路径

    管理图片流程

    DoubanImgs/pipelines.py

    # -*- coding: utf-8 -*-from scrapy.pipelines.images import ImagesPipelinefrom scrapy.exceptions import DropItemfrom scrapy import Requestclass DoubanImgDownloadPipeline(ImagesPipeline):    def get_media_requests(self, item, info):        for image_url in item['image_urls']:            yield Request(                url=image_url,                headers={                    'accept': 'image/webp,image/*,*/*;q=0.8',                    'accept-encoding': 'gzip, deflate, sdch, br',                    'accept-language': 'zh-CN,zh;q=0.8,en;q=0.6',                    'referer': image_url,                    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'                }            )    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 startproject DoubanImgs创建新项目。
  • 生成Spider:使用scrapy genspider download_douban douban.com创建爬虫实例。
  • 配置Settings:在settings.py中设置图片存储路径和缓存时间等参数。
  • 定义数据模型:在items.py中定义图片爬取结果的结构。
  • 编写管道类:在pipelines.py中定义图片下载和存储逻辑。
  • 运行爬虫:使用命令scrapy crawl download_douban执行任务。

  • ngừng搜求

    如需进一步优化图片爬取效率或处理更多界面,请根据实际需求扩展Spider逻辑或配置参数。

    转载地址:http://xsbxz.baihongyu.com/

    你可能感兴趣的文章
    Oracle中Transate函数的使用
    查看>>
    oracle中关于日期问题的汇总!
    查看>>
    Oracle中常用的语句
    查看>>
    Oracle中序列的操作以及使用前对序列的初始化
    查看>>
    oracle中新建用户和赋予权限
    查看>>
    Oracle中的NVL,NVL2,NULLIF以及COALESCE函数使用
    查看>>
    Oracle中的rownum 和rowid的用法和区别
    查看>>
    oracle中的大小写、字符、dual、数字、处理、日期、函数、显/隐式、时间、条件表达式case、decode、to_date、to_char、sysdate
    查看>>
    oracle中表和视图的区别,oracle中常用表和视图
    查看>>
    oracle从备份归档日志的方法集中回收
    查看>>
    oracle优化器analyzed,Oracle 学习之 性能优化(十三) 索引
    查看>>
    Oracle修改字段类型
    查看>>
    Oracle修改表或者字段的注释
    查看>>
    oracle典型安装失败,安装oracle 10失败
    查看>>
    Oracle内存结构详解(四)--Oracle SGA其他组成部分
    查看>>
    Oracle分析函数之LEAD和LAG
    查看>>
    Oracle创建database link(dblink)和同义词(synonym)
    查看>>
    oracle创建数据库的步骤
    查看>>
    Oracle创建用户、角色、授权、建表
    查看>>
    Oracle创建用户与授予表空间与权限
    查看>>