日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

爬取千库网ppt_Python——如何实现千图成像:初级篇(从图片爬取到图片合成)...

發布時間:2023/12/9 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬取千库网ppt_Python——如何实现千图成像:初级篇(从图片爬取到图片合成)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

千圖成像:用N張圖片拼湊成一張圖片。

實現原理:先將所要成像的圖片轉化成馬賽克圖片,然后從圖庫中用對應顏色的圖片替換相應色塊。

圖庫中的圖片處理:標記圖庫中每張圖片的混合顏色,用于替換目標色塊,并記錄每張圖片的特征用于成像,增加成像質量。

0,起源

圖片局部

很久前在刷微博的時候看到了這條,被他給震撼到了,圖片是由LOL近千張皮膚圖片組合構成的(難道這是用ps做的,還是一張張拼的,應該不可能吧),就在昨天突然就想起了這個事,就決定也做一個,隨即便展開了行動。搜到了這篇文章,看了下圖片的構成,決定先取得所有皮膚的圖片再說吧!便又開始了爬蟲!運行環境:Python3.6.5 , pycharm-2018-1-2 , win10

愣著干嘛,快往下看

1.爬蟲思路皮膚圖片的來源問題,首先到官網去找了找,想到了道聚城皮膚專賣區,其中正好有所有我們需要的圖片。

皮膚圖片來源

以此類推便可取得多個皮膚的URL,發現只有圖中紅框處不同

URLS

嘗試著改變紅框內的數字(玄學),在改變后三位(122015-->122001)時,獲得了另一張諾手的皮膚,基本可以確定后三位為皮膚編號,前面的數字為英雄編號,且皮膚編號必須為三位,這一步得感謝這位博主,讓我更加確定了這個規律的可行性。(這一步花了好久)

看到這里你可能會有所疑問,為什么不直接正則獲取所需圖片的URL呢?為什么要大費周章地尋找規律?因為這個翻頁式網站比較特殊,在翻頁時URL并不會改變,所以無法通過常用方法獲取所有皮膚,那估計又有人要提出使用selenium庫來模擬人使用瀏覽器獲取所有圖片,但是這會造成爬取圖片的速度大大下降,只能作為下策(在這過程中了解到了八爪魚,發現其原理類似于selenium,是模擬人操控瀏覽器,速度也是不容直視,雖然它能爬取近98%的網站),在博主能力有限的情況下選擇了尋找規律之旅!

如果你有好的方法解決這個問題,可以在評論處提出,十分感謝!

接下來在知道了規律的情況下,那么如何獲取每個不同英雄的編號呢?在其他博主的引導下,發現LoL資料庫中有所有英雄的頭像,通過F12的慢慢查找,發現了這個js文件!

Network

查看其preview,便可得到所有英雄編號,并測試發現可用!比如Ashe艾希的第一個皮膚對應編號按規律應該是22001,所以URL就是https://game.gtimg.cn/images/daoju/app/lol/medium/2-22001-9.jpg,測試發現確實成功了!

preview

好了,到此為止網頁分析到此結束了,終于可以編寫代碼了!

2,代碼框架1,獲取英雄編號及皮膚編號(說明:關于皮膚編號并未找到每個英雄皮膚的數量,所以設置成查找所有001到015的圖片,當然也可以更多020也行)

3,根據URL來下載對應圖片,并保存到本地。

3,完整代碼

import requests

import re

import os

# # # # # # # # # # # # # #

# title:獲取LOL英雄皮膚圖像 #

# author:簡書 Wayne_Dream #

# date:2018-7-5 #

# 轉載請注明出處!!! #

# # # # # # # # # # # # # #

def getHero_data():

try:

headers = {

'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'

}

url = 'http://lol.qq.com/biz/hero/champion.js'

r = requests.get(url, headers=headers)

r.raise_for_status()

r.encoding = r.apparent_encoding

text = r.text

hero_id = re.findall(r'"id":"(.*?)","key"', text)

hero_num = re.findall(r'"key":"(.*?)"', text)

return hero_id, hero_num

except:

return '臥槽,獲取英雄編碼失敗!'

def getUrl(hero_num):

part1 = 'https://game.gtimg.cn/images/daoju/app/lol/medium/2-'

part3 = '-9.jpg'

skin_num = []

Url_list = []

for i in range(1, 21):

i = str(i)

if len(i) == 1:

i = '00'+i

elif len(i) == 2:

i = '0'+i

else:

continue

skin_num.append(i)

for hn in hero_num:

for sn in skin_num:

part2 = hn + sn

url = part1 + part2 + part3

Url_list.append(url)

print('圖片URL獲取成功')

return Url_list

def PicName(hero_id, path):

pic_name_list = []

for id in hero_id:

for i in range(1, 21):

pic_name = path + id + str(i) + '.jpg'

pic_name_list.append(pic_name)

return pic_name_list

def DownloadPic(pic_name_list, Url_list):

count = 0

n = len(Url_list)

try:

for i in range(n):

headers = {

'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'

}

res = requests.get(Url_list[i], headers=headers).content

if len(res) < 100:

count += 1

print('\r當前進度:{:.2f}%'.format(100*(count/n)), end='')

else:

with open(pic_name_list[i], "wb") as f:

f.write(res)

count += 1

print('\r當前進度:{:.2f}%'.format(100*(count/n)), end='')

except:

return '臥槽,獲取圖片失敗!'

if __name__ == '__main__':

print('author:簡書 Wayne_Dream:')

print('https://www.jianshu.com/u/6dd4484b4741')

input('請輸入任意字符開始爬蟲:')

if os.path.exists('D:\LOLimg_wayne\\') == False:

path = r'D:\LOLimg_wayne\\'

os.mkdir(path)

hero_id, hero_num = getHero_data()

Url_list = getUrl(hero_num)

pic_name_list = PicName(hero_id, path)

print('正在下載圖片,請稍等。。。')

print('在' + path + '下查看...')

DownloadPic(pic_name_list, Url_list)

print('圖片下載完畢')

else:

path = r'D:\LOLimg_wayne\\'

hero_id, hero_num = getHero_data()

Url_list = getUrl(hero_num)

pic_name_list = PicName(hero_id, path)

print('正在下載圖片,請稍等。。。')

print('在' + path + '下查看...')

DownloadPic(pic_name_list, Url_list)

print('圖片下載完畢')

代碼寫的比較丑,如有看不懂的部分可在評論區提出,我會秒回你的!/認真臉好了,到這里我們已經完成了LOL全皮膚的獲取,接下來進行最有意思的一步,千圖成像!(文末有我爬取到的皮膚圖集百度網盤地址)

4,初級階段我們先使用一款國外的合成軟件

軟件下載地址如果打不開,那就搜索“foto-mosaik-edda”下載即可!

Windows用戶請選這個

打開后界面是這樣的。

第一步創建圖庫

先選第一步

1.1

1.2

等待一會兒

再選第二步create photo mosaic

2.1

2.2

2.3

2.4

2.5,彈出警告點確認

效果圖

局部

大吉大利,今晚吃雞

有時間再分享如何用python實現這個軟件的功能………… 如發現錯誤或看不懂的地方,可在評論區提出,大家一起交流!

如果想直接嘗試一下千圖成像的,可以私信小編“資料”來領取哦

總結

以上是生活随笔為你收集整理的爬取千库网ppt_Python——如何实现千图成像:初级篇(从图片爬取到图片合成)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。