爬取所有图片,一个页面的图片建一个文件夹。难点,图片中有不少.gif图片,需要重写下载规则,

创建scrapy项目

scrapy startproject qiumeimei

创建爬虫应用

cd qiumeimeiscrapy genspider -t crawl qmm www.xxx.com

items.py文件中定义下载字段

import scrapyclass QiumeimeiItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()page = scrapy.Field()image_url = scrapy.Field()

qmm.py文件中写爬虫主程序

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from qiumeimei.items import QiumeimeiItemclass QmmSpider(CrawlSpider):name = 'qmm'# allowed_domains = ['www.xxx.com']start_urls = ['http://www.qiumeimei.com/image']rules = (Rule(LinkExtractor(allow=r'http://www.qiumeimei.com/image/page/\d+'), callback='parse_item', follow=True),)def parse_item(self, response):page = response.url.split('/')[-1]if not page.isdigit():page = '1'image_urls = response.xpath('//div[@class="main"]/p/img/@data-lazy-src').extract()for image_url in image_urls:item = QiumeimeiItem()item['image_url'] = image_urlitem['page'] = pageyield item

pipelines.py文件中定义下载规则

import scrapy
import os
from scrapy.utils.misc import md5sum
# 导入scrapy 框架里的 管道文件的里的图像 图像处理的专用管道文件
from scrapy.pipelines.images import ImagesPipeline
# 导入图片路径名称
from qiumeimei.settings import IMAGES_STORE as images_store
# 必须继承 ImagesPipeline
class QiumeimeiPipeline(ImagesPipeline):# 定义返回文件名def file_path(self, request, response=None, info=None):file_name = request.url.split('/')[-1]return file_name# 重写父类的 下载文件的 方法def get_media_requests(self, item, info):yield scrapy.Request(url=item['image_url'])#     完成图片存储的方法 名称def item_completed(self, results, item, info):# print(results)page = item['page']print('正在下载第'+page+'页图片')image_url = item['image_url']image_name = image_url.split('/')[-1]old_name_list = [x['path'] for t, x in results if t]# 真正的原图片的存储路径old_name = images_store + old_name_list[0]image_path = images_store + page + "/"# 判断图片存放的目录是否存在if not os.path.exists(image_path):# 根据当前页码创建对应的目录
            os.mkdir(image_path)# 新名称new_name = image_path + image_name# 重命名
        os.rename(old_name, new_name)return item# 重写下载规则def image_downloaded(self, response, request, info):checksum = Nonefor path, image, buf in self.get_images(response, request, info):if checksum is None:buf.seek(0)checksum = md5sum(buf)width, height = image.sizeif self.check_gif(image):self.persist_gif(path, response.body, info)else:self.store.persist_file(path, buf, info,meta={'width': width, 'height': height},headers={'Content-Type': 'image/jpeg'})return checksumdef check_gif(self, image):if image.format is None:return Truedef persist_gif(self, key, data, info):root, ext = os.path.splitext(key)absolute_path = self.store._get_filesystem_path(key)self.store._mkdir(os.path.dirname(absolute_path), info)f = open(absolute_path, 'wb')  # use 'b' to write binary data.f.write(data)

settings.py文件中定义请求头和打开下载管道

USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'ITEM_PIPELINES = {'qiumeimei.pipelines.QiumeimeiPipeline': 300,
}

运行爬虫

scrapy crawl qmm --nolog

查看文件夹是否下载成功

.gif为动态图。

done。

转载于:https://www.cnblogs.com/nmsghgnv/p/11359877.html

scrapy框架爬取糗妹妹网站妹子图分类的所有图片相关推荐

  1. python爬虫scrapy框架爬取糗妹妹段子首页

    声明:本文仅为学习爬虫,请勿商业和恶意攻击网站,本文所有解释权归作者. 本文分别用两种方法把获取的段子信息存储到了本地,分别是txt文件和json文件, txt文件比较简单,生成字典后用命令直接执行即 ...

  2. 【Python爬虫系列教程 28-100】小姐姐带你入门爬虫框架Scrapy、 使用Scrapy框架爬取糗事百科段子

    文章目录 Scrapy快速入门 安装和文档: 快速入门: 创建项目: 目录结构介绍: Scrapy框架架构 Scrapy框架介绍: Scrapy框架模块功能: Scrapy Shell 打开Scrap ...

  3. 14. python爬虫——基于scrapy框架爬取糗事百科上的段子内容

    python爬虫--基于scrapy框架爬取糗事百科上的段子内容 1.需求 2.分析及实现 3.实现效果 4.进行持久化存储 (1)基于终端指令 (2)基于管道 [前置知识]python爬虫--scr ...

  4. python笔记之利用scrapy框架爬取糗事百科首页段子

    环境准备: scrapy框架(可以安装anaconda一个python的发行版本,有很多库) cmd命令窗口 教程: 创建爬虫项目 scrapy startproject qq #创建了一个爬虫项目q ...

  5. 利用Python Scrapy框架爬取“房天下”网站房源数据

    文章目录 分析网页 获取新房.二手房.租房数据 新房数据 租房数据: 二手房数据 反反爬虫 将数据保存至MongoDB数据库 JSON格式 CSV格式 MongoDB数据库 分析网页 "房天 ...

  6. scrapy框架爬取校花网站的升级版

    **spider目录下的文件:定义DemoSpider类** # -*- coding: utf-8 -*- from scrapy.spiders import CrawlSpider,Rule f ...

  7. scrapy框架爬取网站图片

    使用scrapy 框架爬取彼岸图库 前言: 这两天在网上学习了一下scrapy框架,发现及其好用,把爬虫步骤分的细细的.所以写了一个简单项目回顾一下并分享给大家^ . ^ 源码我已经放到Github了 ...

  8. Python的Scrapy框架爬取诗词网站爱情诗送给女友

    文章目录 前言 效果展示: 一.安装scrapy库 二.创建scrapy项目 三.新建爬虫文件scmg_spider.py 四.配置settings.py文件 五.定义数据容器,修改item.py文件 ...

  9. 利用python的scrapy框架爬取google搜索结果页面内容

    scrapy google search 实验目的 爬虫实习的项目1,利用python的scrapy框架爬取google搜索结果页面内容. https://github.com/1012598167/ ...

最新文章

  1. Wallop下蛋送邀请。
  2. 3.3V稳压IC芯片 1117-3.3V性能测试
  3. 组播路由协议基础——组播分发树
  4. oracle 创建database link
  5. Android面试题(五) --重要
  6. javascript进阶教程第二章对象案例实战
  7. vue使用v-for循环,动态修改element-ui的el-switch
  8. python 怎么算l2范数_数学推导+纯Python实现机器学习算法13:Lasso回归
  9. 如何关闭139端口及445端口等危险端口
  10. 结束下面sql块_oracle: PL/SQL基本结构,语法,变量
  11. CentOs 虚拟LINUX系统安装与虚拟环境配置
  12. Mysql 最最最基本语句(大全)
  13. 双网卡内外网同时使用
  14. python计算闰年
  15. 博主的EMNLP2021合作工作已公开:TransPrompt——基于Prompt和迁移学习的小样本文本分类,欢迎阅读与引用
  16. Excel中的Array Formula
  17. Direct2D学习教程(一)
  18. 25 参数估计——样本量的确定
  19. AJ5利用数据源的validation属性对控件进行validation验证
  20. 招聘:量化策略研究员(股票、期货、机器学习)

热门文章

  1. 二叉树的最近公共祖先
  2. 联想 Y7000拯救者 家庭版 Windows自动跟新永久关闭
  3. 【STM32】标准库 菜鸟入门教程之USART
  4. 腾讯又一重磅服务停服!网友:陪了我5年了
  5. java 墨卡托转经纬度_经纬度,墨卡托等坐标转换
  6. 组合数学9-线性常系数奇次递推关系
  7. C语言快速排序(容易理解的完整注释+完整输出)
  8. PHP基础和环境搭建(一)
  9. Android -- 全局变量
  10. 浙里办H5应用开发中的注意事项