Python教你打军体拳
懵逼树上懵逼果,懵逼树下你和我…中午吃饭时候,看到朋友圈大家开始发建军节的内容,才猛地想起来,今天八月一啊!感觉一天活的浑浑噩噩的,都记不清日子了。由于最近在看《大王饶命》,搞得脑回路都有点奇特,突然就想起初中同学的一件趣事。他妈妈当时预产期是8月1号,由于提前检查了性别,知道是个男孩子,家里又是革命老兵出身,所以全家人都提前给他起好名字了叫张建军,结果7月31号的夜里生了他,全家人免不了一场尴尬…第一次听到同学说这个趣事就觉得好冷,然后一记就是十几年。更有趣的是,这个同学最后还真的上了炮兵学院,成了一名军人,哈哈。用大王饶命里面的一句对白,形容他家人当时迎接新生命的心情:”小朋友你好,很高兴见到你”。“不,你高兴的太早了” !
老张今天在朋友圈显摆自己当年参军时候的照片,得瑟的不行。看娃当年也是安分守己的好青年,现在留个大背头,看着就不像好人。想问他军校学的东西,现在还记得么,比如军体拳?想想今天不知道该写点什么,不如我们就来做一套军体拳动画,大家觉得如何!
找了半天,找到一个插图比较齐全的军体拳动作分解。一共有50多张图的分解动作,还起来还不错。
http://www.360doc.com这个网站大家都知道,和百度文库一个鸟样子,复制个文本,还得登录后才能复制,有没有一点奉献精神…文字都没得复制,更别说图片了。
那怎么办?软的不行来硬的,盘他呗!不就是几张图么,爬下来就完了啊…说到这里,顺嘴提一句,昨天爬抖音网页版,结果因为一些音乐的保存名称问题,反复下载了好几次,结果今天有些朋友想照着做一遍的时候,发现网站崩溃了,感觉有些罪过啊!
你还别说360doc这个网站还挺鸡贼的,刚开始下载图片,居然一直提示403 Forbidden!
看了下是免登录的网站啊,没有cookie啥的为啥会提示403 Forbidden呢,卡了半天发现必须要在headers中添加Referer才可以。网页分析和昨天爬抖音的链接没有太大区别在这里就不细讲了…最终下载56张军体拳分解动作图片:
图片下载下来了,光这么看有啥意思啊,要让这兄弟操练起来才对啊!那么我们该如何让这些图片动起来呢?其实很简单,使用from PIL import Image即可!但要注意一点,大家可以看到,13 14等几张图明显很窄,这样直接去合成的图片,根本没法看,所以在合成的同时,统一调整图片尺寸,代码如下:
def composite_gif(self):
_images = []
# 创建初始图片
base_im = Image.open(images_list[0])
# 获取图片尺寸
_picture_size = base_im.size
for file in images_list[1:]:
im = Image.open(file)
if im.size != _picture_size:
# 调整尺寸
im = im.resize(_picture_size)
_images.append(im)
gif = os.path.join(path, "juntiquan.gif")
base_im.save(gif, save_all=True, loop=True, append_images=_images, duration=300)
简单说明下,我们先将第一张图片作为基础图例,并获取他的图片尺寸,之后所有的图片按照这个尺寸进行调整大小,把这些二进制的图片数据存储在一个list,当最后保存图片时,选择save_all = True, loop=True, append_images=_images几个参数,将图片全部保存,duration是图片间隔时长,单位是毫秒哦!
# -*- coding: utf-8 -*-
# @Author : 王翔
# @JianShu : 清风Python
# @Date : 2019/8/1 23:53
# @Software : PyCharm
# @version :Python 3.7.3
# @File : JunTiQuan.py
import os
import requests
from bs4 import BeautifulSoup
from PIL import Image
class JunTiQuan:
def __init__(self):
self.headers = {
"Referer": url,
'Connection': 'keep-alive',
'user-agent': ('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36')
}
self.path = self.image_path()
self.images_list = list()
@staticmethod
def image_path():
"""
获取代码执行目录,并在目录下创建Music文件夹
:return 图片下载文件夹
"""
base_dir = os.path.dirname(os.path.abspath(__file__))
_path = os.path.join(base_dir, "Images")
if not os.path.exists(_path):
os.mkdir(_path)
return _path
def get_request(self, url):
"""
封装requests.get方法
如果为网页请求,返回网页内容
否则,解析图片地址,并返回图片二进制内容
:param url: 请求url(分网页、图片两类)
:return: 网页内容 & 图片二进制文件
"""
r = requests.get(url, headers=self.headers, timeout=5)
if url.endswith('html'):
return r.text
else:
return r.content
def download_images(self, html):
"""
解析军体拳图片
:param html: 网页内容
"""
soup = BeautifulSoup(html, 'lxml')
# 根据关键字onclick查找每个下载地址
for num, img in enumerate(soup.findAll('img', attrs={'fcksavedurl': True}), start=1):
img_bytes = self.get_request(img['src'])
image_name = '{}.png'.format(num)
_full_name = os.path.join(self.path, image_name)
self.images_list.append(_full_name)
with open(_full_name, 'wb') as f:
f.write(img_bytes)
print("已下载 {}".format(image_name))
def composite_gif(self):
_images = []
# 创建初始图片
base_im = Image.open(self.images_list[0])
# 获取图片尺寸
_picture_size = base_im.size
for file in self.images_list[1:]:
im = Image.open(file)
if im.size != _picture_size:
# 调整尺寸
im = im.resize(_picture_size)
_images.append(im)
gif = os.path.join(self.path, "juntiquan.gif")
base_im.save(gif, save_all=True, loop=True, append_images=_images, duration=300)
def run(self):
html = self.get_request(url)
self.download_images(html)
self.composite_gif()
if __name__ == '__main__':
url = 'http://www.360doc.com/content/16/0601/13/33121396_564170382.shtml'
main = JunTiQuan()
main.run()
来一起看看最终生成的动图效果吧:
小伙子打得不错啊,明天我是不是要@一下老张,让他给我们录个军体拳的视频,看看是不是真材实料,哈哈。
OK,今天的内容就到这里,如果觉得内容对你有所帮助,欢迎点击文章右下角的“在看”。
期待你关注我的公众号清风Python,如果觉得不错,希望能动动手指转发给你身边的朋友们。
希望每周一至五清晨的7点10分,都能让清风Python的知识文章叫醒大家!谢谢……
-----------------
本文转自王翔|清风Python
- 点赞
- 收藏
- 关注作者
评论(0)