Python 骚操作!如何让自己在斗图中立于不败之地?
點(diǎn)擊??“小詹學(xué)Python”,選擇“星標(biāo)公眾號”
福利干貨,第一時間送達(dá)!
本文授權(quán)轉(zhuǎn)載自AirPython,禁二次轉(zhuǎn)載
閱讀文本大概需要 6 分鐘。
1
目 標(biāo) 場 景
平常和小伙伴們斗圖的過程中,你是否覺得微信的表情收藏夾不夠用,或者是查找太麻煩,不夠個性化?
那是否可以利用 Python,幫我們挑選到合適的表情,發(fā)送到指定的朋友和微信群呢?
本文的目標(biāo)是根據(jù)關(guān)鍵字爬取「斗圖啦」網(wǎng)站上的表情文件,然后登錄網(wǎng)頁微信端,挑選到合適的表情圖片下載到本地,最后發(fā)送給指定的對象。
2
準(zhǔn) 備 工 作
爬取到表情后,需要人工進(jìn)行一次篩選;另外模擬登錄微信、發(fā)送文件,我們需要通過 pip3 安裝好「matplotlib」和「itchat」庫。
pip3?install?matplotlib
#?安裝itchat
pip3?install?itchat
3
分 析 思 路
我們打開斗圖啦的官網(wǎng),輸入關(guān)鍵字「裝逼」,點(diǎn)擊搜索,發(fā)現(xiàn)頁面分頁后匹配到了很多表情圖片。
首先,我們利用 xpath 獲取到當(dāng)前頁面內(nèi)所有表情父容器元素的列表。
resp?=?requests.get(current_url,?headers=HEADERS)
html_raw?=?etree.HTML(resp.text)
#?獲取到所有的表情圖片所在的a標(biāo)簽
a_elements?=?html_raw.xpath('//div[@class="pic-content?text-center"]/div[@class="random_picture"]/a')
接著,遍歷容器列表,獲取到所有表情的名稱、下載地址屬性信息。
????????????
????????????img_element?=?a_element.xpath('./img[last()]')[0]
????????????
????????????name?=?a_element.xpath('./p/text()')[0]
????????????
????????????img_url?=?img_element.get('data-original')
????????????
????????????name_new?=?make_random_string(6)
????????????img_name?=?name_new?+?os.path.splitext(img_url)[-1]
????????????imgs.append({
????????????????'name':?img_name,
????????????????'url':?img_url
????????????})
然后,利用「urlretrieve」將表情圖片下載到本地;使用「matplotlib」將表情展示出來供我們?yōu)g覽選擇。
local_img?=?'./imgs/%s'?%?target_emoji.get('name')
request.urlretrieve(target_emoji.get('url'),?local_img)
lena?=?mpimg.imread(filename)
plt.imshow(lena)??
plt.axis('off')??
plt.show()
通過控制臺輸入內(nèi)容,決定發(fā)送這個表情圖片,或者是查看下一個表情圖片;也可以通過輸入控制發(fā)送多個表情圖片。
???go_on_send?=?input('需要再發(fā)一張嗎?')
???if?go_on_send:
?????????continue
???else:
?????????print('結(jié)束了')
?????????break
最后,通過 itchat 查詢到指定的人,將選中的表情圖片發(fā)送給他。
????"""
????發(fā)送給某個人
????:param?username:?發(fā)送對象的昵稱
????:param?filename:?文件名
????:return:
????"""
????room?=?itchat.search_friends(name=r'%s'?%?username)
????userName?=?room[0]['UserName']
????try:
????????if?isinstance(file_names,?list):
????????????#?多個圖片
????????????for?file_name?in?file_names:
????????????????itchat.send_image(file_name,?toUserName=userName)
????????else:
????????????#?一個圖片
????????????itchat.send_image(file_names,?toUserName=userName)
????????print('發(fā)送完畢!')
????except:
????????print('發(fā)送出錯!')
也可以通過群聊名稱獲取到群聊對象,把表情圖片發(fā)送到指定的微信群內(nèi)。
????"""
????發(fā)送表情到指定的群聊
????:param?target_group_chat_name:
????:param?file_name:
????:return:
????"""
????rooms?=?itchat.get_chatrooms(update=True)
????#?目標(biāo)群聊對象
????target_room?=?None
????for?room?in?rooms:
????????group_chat_name?=?room.get('NickName')
????????if?target_group_chat_name?==?group_chat_name:
????????????target_room?=?room
????????????break
????if?target_room:
????????if?isinstance(file_names,?list):
????????????for?file_name?in?file_names:
????????????????target_room.send_image(file_name)
????????else:
????????????target_room.send_image(file_names)
????????print('發(fā)送完畢!')
????else:
????????print('抱歉,不存在這個群聊')
4
結(jié) 果 結(jié) 論
運(yùn)行程序后,通過微信客戶端掃描二維碼登錄微信,然后輸入要發(fā)送的對象、表情類型,程序會自動爬取到匹配后的表情,最后通過用戶篩選后,發(fā)送到指定的人。
我已經(jīng)將全部源碼上傳到后臺上,公眾號回復(fù)「?斗圖?」即可獲得。
推薦閱讀(點(diǎn)擊標(biāo)題即可跳轉(zhuǎn))
Python 騷操作:如何給你愛的讀者每天發(fā)早報?
Python 3.8 即將到來,這是你需要關(guān)注的幾大新特性
總結(jié)
以上是生活随笔為你收集整理的Python 骚操作!如何让自己在斗图中立于不败之地?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 加速时光,让你永远70岁的「变老神器」F
- 下一篇: 免费体验|教你用Python掌握企业级产