文章插圖

文章插圖
前方高能!看小伙是怎么表白粉絲的前言一、??愛心墻??二、代碼分析1.頭像爬取2.頭像去重3.繪制愛心墻寫在最后
私信小編01即可獲取大量的Python學習資料
前言
自從開始寫博客以來得到了許多小伙伴的支持和鼓勵 , 關注人數也有所增加 。為了搞清楚是哪些可愛的人兒在關注我 , 也是為了感謝大家的厚愛 , 同時更是為了激勵自己 , kimol君決定用粉絲的頭像繪制一幅愛心墻 。沒有錯!今天kimol君將要??實名表白他的粉絲們??~當然感興趣的小伙伴完全可以把代碼用來表白自己的女盆友呀
一、??愛心墻??
通過爬蟲搜集到粉絲的頭像 , 然后利用PIL庫拼接出愛心墻的形狀:
在個人中心點擊我的粉絲便可以看到自己的粉絲 , 通過抓包可知對應的接口為:
url = 'https://me.csdn.net/api/relation/index?pageno=1&pagesize=20&relation_type=fans' # 接口地址那么 , 可以定義一個函數來獲取粉絲的信息:def get_fansInfo():'''獲取粉絲相關信息'''url = 'https://me.csdn.net/api/relation/index?pageno=%d&pagesize=%d&relation_type=fans' # 接口地址cookies = {} # 用戶登陸cookiesheaders = {# 請求頭'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0','Accept': 'application/json, text/plain, */*','Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Referer': 'https://i.csdn.net/','Origin': 'https://i.csdn.net','Connection': 'keep-alive','TE': 'Trailers',}# 獲取粉絲總數res = requests.get(url%(1,10),headers=headers,cookies=cookies)res_json = res.json()N_fans = res_json['data']['data_all']print('一共有%d個粉絲'%N_fans)# 獲取全部粉絲數據res = requests.get(url%(1,N_fans),headers=headers,cookies=cookies)res_json = res.json()return res_json在返回的數據中 , 包括一個avatar字段 , 這個就是用戶的頭像地址 , 拿到頭像地址之后便可以定義個函數來下載相應的頭像:def download_avatar(username,url):'''下載用戶頭像'''savePath = './avatars' # 頭像存儲目錄res = requests.get(url)with open('%s/%s.jpg'%(savePath,username),'wb') as f:f.write(res.content)定義主函數 , 運行代碼:if __name__ == '__main__':fans = get_fansInfo()for f in fans['data']['list']:username = f['fans'] # 用戶名url = f['avatar']# 頭像地址download_avatar(username,url)print('用戶"%s"頭像下載完成!'%username)最后我成功將所有頭像下載到本地文件夾中:聰明的你應該已經發現 , 在爬取到的頭像中有兩個頭像重復出現(想必這應該是官方默認頭像):
def get_md5(filename):'''獲取文件的md5值cls'''m = hashlib.md5()with open(filename,'rb') as f:for line in f:m.update(line)md5 = m.hexdigest()return md5說明:每個文件通過MD5計算出摘要 , 理論來說只有文件完全一致MD5值才會相同 。因此 , 可以利用它來進行圖像的去重 。對頭像進行去重 , 并把去重后的頭像保存到另外的目錄中:# 照片去重md5_already = [] # 用于存儲已經記錄過的圖片 , 便于去重for filename in os.listdir('./avatars'):md5 = get_md5('./avatars/'+filename)if md5 not in md5_already:md5_already.append(md5)shutil.copyfile('./avatars/'+filename,'./avatars(dr)/'+filename)3.繪制愛心墻【python畫愛心代碼大全 用python畫愛心的程序代碼】這一步 , 主要是利用python中的PIL庫來把頭像按照設定的框架拼接成一個更大的圖片 。首先導入相關庫:
import osimport randomimport numpy as npimport PIL.Image as Image1234定義繪制圖形的框架(用二維數組表示):FRAME = [[0,1,1,0,0,0,0,1,1,0],[1,1,1,1,0,0,1,1,1,1],[1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1],[0,1,1,1,1,1,1,1,1,0],[0,0,1,1,1,1,1,1,0,0],[0,0,0,1,1,1,1,0,0,0],[0,0,0,0,1,1,0,0,0,0]]這里大家完全可以發揮自己的想象 , 畫你心中所想其中 , 0表示不進行填充 , 1表示用頭像進行填充 。定義相關參數 , 包括每張用于填充的頭像的大小、每個點位填充的次數等:
# 定義相關參數SIZE = 50 # 每張圖片的尺寸為50*50N = 2# 每個點位上放置2*2張圖片# 計算相關參數width = np.shape(FRAME)[1]*N*SIZE# 照片墻寬度height = np.shape(FRAME)[0]*N*SIZE # 照片墻高度n_img = np.sum(FRAME)*(N**2)# 照片墻需要的照片數filenames = random.sample(os.listdir('./avatars(dr)'),n_img) # 隨機選取n_img張照片filenames = ['./avatars(dr)/'+f for f in filenames]遍歷FRAME , 用頭像對背景圖片進行填充:# 繪制愛心墻img_bg = Image.new('RGB',(width,height)) # 設置照片墻背景i = 0for y in range(np.shape(FRAME)[0]):for x in range(np.shape(FRAME)[1]):if FRAME[y][x] == 1: # 如果需要填充pos_x = x*N*SIZE # 填充起始X坐標位置pos_y = y*N*SIZE # 填充起始Y坐標位置for yy in range(N):for xx in range(N):img = Image.open(filenames[i])img = img.resize((SIZE,SIZE),Image.ANTIALIAS)img_bg.paste(img,(pos_x+xx*SIZE,pos_y+yy*SIZE))i += 1# 保存圖片img_bg.save('love.jpg')寫在最后天氣逐漸微寒 , 愿這次小小的表白可以給你們帶來些許暖意;愿風雨兼程 , 不忘歸途;愿身能似月亭亭,千里伴君行 。
- 怎么畫扇形的角度 ps畫120度扇形
- 愛心香蕉 愛心香蕉怎么切
- 畫板軟件下載 畫本APP下載軟件
- 美人魚公主簡筆畫 中國發現美人魚公主
- 做流程圖用什么軟件比較好 用什么軟件畫流程圖方便
- 十二生肖的簡筆畫,生肖牛郵票怎么畫簡筆畫
- 山水風景圖片簡筆畫:兒童簡筆畫:畫春天美景的步驟?
- 用python畫愛心的程序代碼 python簡單的畫圖代碼愛心
- 動畫片小熊貓學木匠 熊貓學木匠
- 電腦flash什么用 flash是個什么軟件
