Python教你打軍體拳
懵逼樹(shù)上懵逼果,懵逼樹(shù)下你和我…中午吃飯時(shí)候,看到朋友圈大家開(kāi)始發(fā)建軍節(jié)的內(nèi)容,才猛地想起來(lái),今天八月一啊!感覺(jué)一天活的渾渾噩噩的,都記不清日子了。由于最近在看《大王饒命》,搞得腦回路都有點(diǎn)奇特,突然就想起初中同學(xué)的一件趣事。他媽媽當(dāng)時(shí)預(yù)產(chǎn)期是8月1號(hào),由于提前檢查了性別,知道是個(gè)男孩子,家里又是革命老兵出身,所以全家人都提前給他起好名字了叫張建軍,結(jié)果7月31號(hào)的夜里生了他,全家人免不了一場(chǎng)尷尬…第一次聽(tīng)到同學(xué)說(shuō)這個(gè)趣事就覺(jué)得好冷,然后一記就是十幾年。更有趣的是,這個(gè)同學(xué)最后還真的上了炮兵學(xué)院,成了一名軍人,哈哈。用大王饒命里面的一句對(duì)白,形容他家人當(dāng)時(shí)迎接新生命的心情:”小朋友你好,很高興見(jiàn)到你”。“不,你高興的太早了” !
老張今天在朋友圈顯擺自己當(dāng)年參軍時(shí)候的照片,得瑟的不行。看娃當(dāng)年也是安分守己的好青年,現(xiàn)在留個(gè)大背頭,看著就不像好人。想問(wèn)他軍校學(xué)的東西,現(xiàn)在還記得么,比如軍體拳?想想今天不知道該寫(xiě)點(diǎn)什么,不如我們就來(lái)做一套軍體拳動(dòng)畫(huà),大家覺(jué)得如何!
找了半天,找到一個(gè)插圖比較齊全的軍體拳動(dòng)作分解。一共有50多張圖的分解動(dòng)作,還起來(lái)還不錯(cuò)。
http://www.360doc.com這個(gè)網(wǎng)站大家都知道,和百度文庫(kù)一個(gè)鳥(niǎo)樣子,復(fù)制個(gè)文本,還得登錄后才能復(fù)制,有沒(méi)有一點(diǎn)奉獻(xiàn)精神…文字都沒(méi)得復(fù)制,更別說(shuō)圖片了。
那怎么辦?軟的不行來(lái)硬的,盤(pán)他唄!不就是幾張圖么,爬下來(lái)就完了啊…說(shuō)到這里,順嘴提一句,昨天爬抖音網(wǎng)頁(yè)版,結(jié)果因?yàn)橐恍┮魳?lè)的保存名稱(chēng)問(wèn)題,反復(fù)下載了好幾次,結(jié)果今天有些朋友想照著做一遍的時(shí)候,發(fā)現(xiàn)網(wǎng)站崩潰了,感覺(jué)有些罪過(guò)啊!
你還別說(shuō)360doc這個(gè)網(wǎng)站還挺雞賊的,剛開(kāi)始下載圖片,居然一直提示403 Forbidden!
看了下是免登錄的網(wǎng)站啊,沒(méi)有cookie啥的為啥會(huì)提示403 Forbidden呢,卡了半天發(fā)現(xiàn)必須要在headers中添加Referer才可以。網(wǎng)頁(yè)分析和昨天爬抖音的鏈接沒(méi)有太大區(qū)別在這里就不細(xì)講了…最終下載56張軍體拳分解動(dòng)作圖片:
圖片下載下來(lái)了,光這么看有啥意思啊,要讓這兄弟操練起來(lái)才對(duì)啊!那么我們?cè)撊绾巫屵@些圖片動(dòng)起來(lái)呢?其實(shí)很簡(jiǎn)單,使用from PIL import Image即可!但要注意一點(diǎn),大家可以看到,13 14等幾張圖明顯很窄,這樣直接去合成的圖片,根本沒(méi)法看,所以在合成的同時(shí),統(tǒng)一調(diào)整圖片尺寸,代碼如下:
def composite_gif(self):
_images = []
# 創(chuàng)建初始圖片
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:
# 調(diào)整尺寸
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)
簡(jiǎn)單說(shuō)明下,我們先將第一張圖片作為基礎(chǔ)圖例,并獲取他的圖片尺寸,之后所有的圖片按照這個(gè)尺寸進(jìn)行調(diào)整大小,把這些二進(jìn)制的圖片數(shù)據(jù)存儲(chǔ)在一個(gè)list,當(dāng)最后保存圖片時(shí),選擇save_all = True, loop=True, append_images=_images幾個(gè)參數(shù),將圖片全部保存,duration是圖片間隔時(shí)長(zhǎng),單位是毫秒哦!
# -*- coding: utf-8 -*-
# @Author ? : 王翔
# @JianShu ?: 清風(fēng)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():
"""
獲取代碼執(zhí)行目錄,并在目錄下創(chuàng)建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方法
如果為網(wǎng)頁(yè)請(qǐng)求,返回網(wǎng)頁(yè)內(nèi)容
否則,解析圖片地址,并返回圖片二進(jìn)制內(nèi)容
:param url: 請(qǐng)求url(分網(wǎng)頁(yè)、圖片兩類(lèi))
:return: 網(wǎng)頁(yè)內(nèi)容 & 圖片二進(jìn)制文件
"""
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: 網(wǎng)頁(yè)內(nèi)容
"""
soup = BeautifulSoup(html, 'lxml')
# 根據(jù)關(guān)鍵字onclick查找每個(gè)-
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 = []
# 創(chuàng)建初始圖片
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:
# 調(diào)整尺寸
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()
來(lái)一起看看最終生成的動(dòng)圖效果吧:
小伙子打得不錯(cuò)啊,明天我是不是要@一下老張,讓他給我們錄個(gè)軍體拳的視頻,看看是不是真材實(shí)料,哈哈。
OK,今天的內(nèi)容就到這里,如果覺(jué)得內(nèi)容對(duì)你有所幫助,歡迎點(diǎn)擊文章右下角的“在看”。
期待你關(guān)注我的公眾號(hào)清風(fēng)Python,如果覺(jué)得不錯(cuò),希望能動(dòng)動(dòng)手指轉(zhuǎn)發(fā)給你身邊的朋友們。
希望每周一至五清晨的7點(diǎn)10分,都能讓清風(fēng)Python的知識(shí)文章叫醒大家!謝謝……
-----------------
本文轉(zhuǎn)自王翔|清風(fēng)Python
python
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。