博客
关于我
使用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/

    你可能感兴趣的文章
    PhalApi:[1.23] 请求和响应:GET和POST两者皆可得及超越JSON格式返回
    查看>>
    Phalcon环境搭建与项目开发
    查看>>
    Phantom.js维护者退出,项目的未来成疑
    查看>>
    Pharmaceutical的同学们都看过来,关于补码运算的复习相关内容
    查看>>
    Phaser性能测试加强版
    查看>>
    phoenix 开发API系列(一)创建简单的http api
    查看>>
    Phoenix 查看表信息及修改元数据
    查看>>
    phoenixframework集成了所有自动化测试的思想的平台。mark一下。
    查看>>
    phoenix_执行sql报错_Error: ERROR 504 (42703): Undefined column. columnName=(state=4270_大数据工作笔记0181
    查看>>
    phoenix启动失败_The history file `/root/.sqlline/history` may be an older history---记录024_大数据工作笔记0184
    查看>>
    Phoenix基础命令_视图映射和表映射_数字存储问题---大数据之Hbase工作笔记0036
    查看>>
    phoenix无法连接hbase shell创建表失败_报错_PleaseHoldException: Master is initializing---记录020_大数据工作笔记0180
    查看>>
    Phoenix简介_安装部署_以及连接使用---大数据之Hbase工作笔记0035
    查看>>
    phoenix连接hbase报错Can not resolve hadoop120, please check your network_记录026---大数据工作笔记0187
    查看>>
    PhotoPrism:这款获得35.8K星的AI照片管理神器你值得拥有
    查看>>
    Photoshop工作笔记001---Photoshop常用快捷键总结
    查看>>
    photoshop智能参考线
    查看>>
    Reids配置文件redis.conf中文详解
    查看>>
    Photoshop脚本入门
    查看>>
    PHP
    查看>>