爬了个网站,结果发现该网站图片不好看,于是看程序员如何制作DIY表情包?


前提: 本篇博客涵盖scrapy知识点过多,需要一定基础,理解不了的可以留言, 同时还包含一个gif’制作库的使用,剩下的模块我觉得挺简单的!
效果图如上:

制作表情包:

  • 前言:
  • 分析网站:
  • 编写代码:
    • 编写spider:
    • 编写items:
    • 编写pipeline:
  • 制作表情包:
  • 后记:这个真好玩,斗图再也没输过了。

前言:

其实爬虫一直爬取图片挺没意思的,单纯满足自我私欲之外,然后我就想搞点其他的,于是想到了可以爬图片制作表情包这样的想法,加上最近学了scrapy框架的知识, 正好一起使用上来,加快了爬虫的效率,以及制作图片的资源快捷性!

  • 首先: 分析网站
  • 编码: 使用scrapy框架爬取图片保存下来
  • 制作: 使用imageio生成gif图片

博客分为三大块,按照自我需求寻找思路, 觉得不错的还是点个关注和赞吧,创作不易,没动力哎。


分析网站:

  • 本次使用scrapy框架爬取一个小网站, 挺担心这个网站的!

  • first_url: https://www.52doutu.cn/post/1/

  • 从中点开任意一个查看全部,网址规模都是一样的:https://www.52doutu.cn/p/99/
    也就是p后面的数值不一样, 这里可以匹配过去。后面代码细讲:之后打开这样的页面:

  • 别想了, 哪有这么简单直接索取的,这里存在一个js加载,直接获取不了
    打开页面源代码,从这里获取,图片url。

具体网站具体分析,不是所有网站都是傻逼网站那么简单爬取。


编写代码:

编写spider:

爬虫程序

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from joke_image.items import JokeImageItem
import timeclass JokeImgSpiderSpider(CrawlSpider):name = 'joke_img_spider'allowed_domains = ['52doutu.cn']start_urls = ['https://www.52doutu.cn/post/1/']rules = (Rule(LinkExtractor(allow=r'.*www.52doutu.cn/post/\d+/'), follow=True),Rule(LinkExtractor(allow=r'.*www.52doutu.cn/p/\d+/'),callback="parse_img", follow=False))def parse_img(self, response):time.sleep(0.2)title = response.xpath('//h1[@class="entry-title"]/text()').get()image_urls = response.xpath('//section[@class="post-gallery"]/div/a/img/@data-original').getall()# image_urls = response.xpath('//div[@class="article-content"]//div/a/img/@data-original').getall()#  获得真实xpath格式items = JokeImageItem()print(image_urls)items['title'] = titleitems['image_urls'] = image_urlsyield items

编写items:

管道

import scrapyclass JokeImageItem(scrapy.Item):image = scrapy.Field()image_urls = scrapy.Field()title = scrapy.Field()

编写pipeline:

这里实现了图片分类的功能:
IMAGES_STORE 这个是图片仓库, setting自己设置:

from joke_image.settings import IMAGES_STORE
from scrapy.http import Request
from scrapy.pipelines.images import ImagesPipelineclass JokeImagePipeline(ImagesPipeline):def get_media_requests(self, item, info):# 不断的请求 , 然后返回, 把items传回for url in item['image_urls']:yield Request(url, meta={'item': item})def file_path(self, request, response=None, info=None):title = request.meta['item']['title']path = IMAGES_STORE + f'\\{title}\\{request.url.split("/")[-1]}'print(f'保存在:{path}')return path

然后我们在运行程序:之后得到的效果图如下:

制作表情包:

制作表情包的函数库刚开始选择二种;
from images2gif import writeGif
import imageio
结果发现 image2gif 存在一个bug 图片只会加载第一张 就闪退
所以重写代码 最后成功:

最后将这个函数功能封装了下:
参数也就是一个path, 存放图片的地方, 给个例子:

path = r’D:\pyth\scrapy 项目\joke_image\表情包’

类似这样的

import imageio
import os# 导入制作gif函数库class MakeImagesMovie(object):"""from class get the images_listreturn:  small gifparams: path  * images path"""def __init__(self, path):self.path = pathself.image_files = []def get_image(self):for dirpath, dirnames, filenames in os.walk(path):# dirpath 所有目录的路径  包括主目录 和子目录# dirnames 所有子目录的名称# filenames 所有文件的名称# 中转列表title_img = [os.path.join(dirpath, i) for i in os.listdir(dirpath)]self.image_files.append(title_img)  # 构造二维数组def create_gif(self, image_list, gif_path, duration):frames = []for image_name in image_list:frames.append(imageio.imread(image_name))imageio.mimsave(gif_path, frames, 'GIF', duration=duration)returndef make_movies(self):self.get_image()for title_img in self.image_files[1:]:  # 遍历大列表# frames = []  # 存放每个文件夹网址的目录name = title_img[0].split('/')[5][:6]gif_path = f'D:/pyth/scrapy 项目/表情包gif/{name}.gif'self.create_gif(title_img[:10], gif_path, duration=0.25)print(f'成功制作出{name}的gif')

刚好我也是写了个爬虫 制作了表情包, 如果想用自己的图片制作表情包,这个函数也是可以的。动手试试吧!

后记:这个真好玩,斗图再也没输过了。

总结到一个问题,学的越多,越难的很细节描述一个事物,角度不同吧,我感觉这个很简单,可能对于小白说,这个很难理解,没别的说。

喜欢就个关注和点赞,支持支持!!

就这? Scrapy框架被我用了个遍,结果只制作了表情包!相关推荐

  1. python爬虫之Scrapy框架的post请求和核心组件的工作 流程

    python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...

  2. Scrapy框架中的crawlspider爬虫

    1 crawlspider是什么 在spider中要寻找下一页的url地址或者内容的url地址,想想是否有简单的方法省略寻找url的过程? 思路: 从response中提取所有的满足规则的url地址 ...

  3. Scrapy框架的概念、作用和工作流程

    1. scrapy的概念         Scrapy是一个Python编写的开源网络爬虫框架.它是一个被设计用于爬取网络数据.提取结构性数据的框架. Scrapy是一个为了爬取网站数据,提取结构性数 ...

  4. 爬虫基础分享Scrapy框架流程图与安装

    从头开发一个爬虫程序是一项烦琐的工作,为了避免因制造轮子而消耗大量时间,在实际应用中我们可以选择使用一些优秀的爬虫框架,使用框架可以降低开发成本,提高程序质量,让我们能够专注于业务逻辑.所以,我们一起 ...

  5. python 爬虫 学习笔记(一)Scrapy框架入门

    沉迷于通过高效算法及经典数据结构来优化程序的时候并不理解,为什么多线程可以优化爬虫运行速度?原来是程序特性所决定的:传统算法的程序复杂度主要来源于计算,但网络程序的计算时间可以忽略不计,网络程序所面临 ...

  6. Windows7 Scrapy框架建立

    Windows7 Scrapy框架建立 因为在Windows7中安装python 的 scrapy框架实在是太繁琐,而且在网上查找的scrapy安装过程全都是告诉你去哪里下载,所以光去找东西都找了很久 ...

  7. 关于使用scrapy框架编写爬虫以及Ajax动态加载问题、反爬问题解决方案

    关于使用scrapy框架编写爬虫以及Ajax动态加载问题.反爬问题解决方案 参考文章: (1)关于使用scrapy框架编写爬虫以及Ajax动态加载问题.反爬问题解决方案 (2)https://www. ...

  8. Scrapy框架的使用之Scrapy对接Selenium

    Scrapy抓取页面的方式和requests库类似,都是直接模拟HTTP请求,而Scrapy也不能抓取JavaScript动态渲染的页面.在前文中抓取JavaScript渲染的页面有两种方式.一种是分 ...

  9. python scrapy框架基如何实现多线程_【转】爬虫的一般方法、异步、并发与框架scrapy的效率比较...

    问题的由来 我们的需求为爬取红色框框内的名人(有500条记录,图片只展示了一部分)的 名字以及其介绍,关于其介绍,点击该名人的名字即可,如下图: 这就意味着我们需要爬取500个这样的页面,即500个H ...

最新文章

  1. “玩转课堂”软件需求规格说明
  2. linux多线程求和_谈一谈C++中的多线程(上)
  3. 4j 设置日志保存天数_MySQL中的这几类日志,你一定要知道
  4. 向linux内核增加新的系统调用,为linux内核添加新的系统调用
  5. android 关闭软键盘_实现边到边的体验 | 让您的软键盘动起来 (一)
  6. centos oracle 修改监听服务名_Oracle-Oracle DB、监听和oem开机启动
  7. 影响大数据和分析的5大趋势
  8. 基于用户的协同过滤推荐算法
  9. java队列类_用Java编写一个队列类
  10. 欧派caxa设计软件_CAXA 2016 非常优秀的CAD电子图版设计软件
  11. 频谱分析仪原理结构框图
  12. Java批量修改文件名称
  13. 计算机怎么审单流程,电子审单
  14. php 识别lrc,自动识别LRC歌词精选.pptx
  15. RAIN - SEKAI NO OWARI - 歌词翻译及罗马音译整理
  16. Codeforces Round #614 (Div. 2)A. ConneR and the A.R.C. Markland-N
  17. 什么是TPS,什么是QPS?
  18. 生于80年代,穷于10年代,败于90后
  19. C#高级编程——C#扩展方法+接口,定义统一的搜索接口,基于Unity(三)——图文详解加源码
  20. JAVA 处理带AM 或 PM的时间

热门文章

  1. elasticSearch port
  2. 一、微服务和Spring Cloud Alibaba介绍
  3. Python中字典的常用操作
  4. 全网最详细的负载均衡原理图解
  5. 一首歌 一种心情 一段故事
  6. ipython换行_ipython 换行
  7. 重写HTML5 video播放器
  8. Html5Ccss3响应式布局简单总结
  9. 广西师范大学计算机网络试卷,广西师范大学网络中心
  10. 郭金东:如何长期坚持做好一件事?