妹子说我没有表情包?没关系通过python爬虫爬取表情
需求分析
昨天,我被一個(gè)妹子嘲笑了,“仙草,你天天聊天,怎么連一個(gè)表情包都沒(méi)有啊?每次發(fā)也是用系統(tǒng)推薦的默認(rèn)表情,和一個(gè)土狗似的,笑死人了。”
啊這,確實(shí),我從來(lái)都不保存表情,所以每次聊天要么就是轉(zhuǎn)發(fā)別人的,要么就是輸入幾個(gè)字,看看系統(tǒng)會(huì)不會(huì)給我推薦表情,確實(shí)是有點(diǎn)不太行
我虛心請(qǐng)教(中路對(duì)狙),“那你的表情包是哪里來(lái)的啊?不會(huì)是和別人聊天的時(shí)候偷來(lái)的吧,那可是有夠丟臉的呢!“
妹子不屑一顧,”切,你說(shuō)的什么啊,看到好看的表情收藏起來(lái)不是很正常的事情嗎?像你一樣沒(méi)幾個(gè)好友,恐怕也沒(méi)有表情可以收藏吧?“
好吧,我想她說(shuō)的沒(méi)錯(cuò)。可是誰(shuí)說(shuō)收藏表情一定要通過(guò)和別人聊天呢?我們可以直接通過(guò)python的爬蟲(chóng)程序,把表情包爬取下來(lái)!
實(shí)現(xiàn)分析
說(shuō)干就干,不就是爬取表情嗎,有什么困難的,等我把表情包收集齊了,我就是最靚的仔了。三十年河?xùn)|,三十年河西,莫欺少年沒(méi)有圖
那么首先呢,我們遇到了第一個(gè)小困難就是,我們需要知道表情包的類型。就是說(shuō),不是所有的表情包都是gif動(dòng)圖,肯定還有png格式的靜態(tài)圖,我們?nèi)绾螀^(qū)分動(dòng)圖和靜圖,也就是說(shuō),如何區(qū)分圖片的類型呢?
一個(gè)好的想法就是,通過(guò)正則表達(dá)式,把.png,.jpg,.gif的格式類型匹配出來(lái),然后就能夠知道對(duì)應(yīng)的類型了。不過(guò)呢,寫正則表達(dá)式有點(diǎn)麻煩,我想偷懶,于是就采用了一個(gè)更簡(jiǎn)單的方法,也就是說(shuō),反正.png,.gif都是4個(gè)字母的,那我們就直接把后四個(gè)字符取出來(lái)不就解決了嗎?
好吧,但是偷懶也是有代價(jià)的,這個(gè)方法看起來(lái)很簡(jiǎn)單,實(shí)則不行,因?yàn)榻Y(jié)尾的格式一定是4個(gè)字符的嗎?比如說(shuō),如果遇到了.jpeg,怎么辦呢?是不是程序就出錯(cuò)了呢?不要緊,我已經(jīng)去查看過(guò)了,目標(biāo)中沒(méi)有.jpeg格式的文件。但是現(xiàn)在沒(méi)有就能保證程序不出錯(cuò)了嗎?當(dāng)然不,如果以后有了.jpeg怎么辦呢?是不是就立刻出錯(cuò)了呢?
對(duì),說(shuō)的沒(méi)錯(cuò),但是我就是不改,不過(guò)把我問(wèn)題已經(jīng)告訴你了,你可以自己嘗試對(duì)其進(jìn)行簡(jiǎn)單的修改,比如說(shuō)加上一個(gè)if判斷,或者是正則表達(dá)式來(lái)改正這一錯(cuò)誤
完整代碼展示
import requests import time from parsel import Selector from threading import Thread from queue import Queue from base64 import b64decodeurl = b64decode("aHR0cDovL3d3dy5iYnNuZXQuY29tL2dhb3hpYW8=").decode() headers = {"user-agent": "Mozilla/5.0"} q = Queue()def put_img():r = requests.get(url, headers=headers)s = Selector(r.text)al = s.xpath("//div[@class='thumbnail']/a")num = 1for a in al:src = a.xpath("./img/@src").get()title = a.xpath("./img/@alt").get()q.put({"num": str(num),"src": src,"title": title})num += 1def get_img():while True:img = q.get()r = requests.get(img["src"], headers=headers)with open(img["num"] + img["src"][-4::], "wb") as f:f.write(r.content)q.task_done()time.sleep(1)print(img["num"] + "個(gè),已完成")t_put = Thread(target=put_img) t_get = Thread(target=get_img) t_get.setDaemon(True) t_put.start() t_get.start() t_put.join() q.join()正常運(yùn)行以后,就可以看到消息提示了
隨后,通過(guò)查看文件,我們可以發(fā)現(xiàn),表情包已經(jīng)成功的保存了。太好了,現(xiàn)在我終于可以拿去聊天啦
自從上次的事情以后,不知道的參考這里,我都是非常謹(jǐn)慎小心的,避免影響到其他人的網(wǎng)站業(yè)務(wù),因此,只爬取了非常有限的內(nèi)容。如果這不能讓你滿意的話,你需要自己對(duì)程序進(jìn)行修改。
嚴(yán)格遵守爬蟲(chóng)的相關(guān)規(guī)定是非常重要的,如果因此帶來(lái)不便,請(qǐng)諒解!
總結(jié)
以上是生活随笔為你收集整理的妹子说我没有表情包?没关系通过python爬虫爬取表情的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PHP全栈学习笔记29
- 下一篇: JAVA基础03-Object类,常用类