妹子说我没有表情包?没关系通过python爬虫爬取表情
需求分析
昨天,我被一個妹子嘲笑了,“仙草,你天天聊天,怎么連一個表情包都沒有啊?每次發也是用系統推薦的默認表情,和一個土狗似的,笑死人了。”
啊這,確實,我從來都不保存表情,所以每次聊天要么就是轉發別人的,要么就是輸入幾個字,看看系統會不會給我推薦表情,確實是有點不太行
我虛心請教(中路對狙),“那你的表情包是哪里來的啊?不會是和別人聊天的時候偷來的吧,那可是有夠丟臉的呢!“
妹子不屑一顧,”切,你說的什么啊,看到好看的表情收藏起來不是很正常的事情嗎?像你一樣沒幾個好友,恐怕也沒有表情可以收藏吧?“
好吧,我想她說的沒錯。可是誰說收藏表情一定要通過和別人聊天呢?我們可以直接通過python的爬蟲程序,把表情包爬取下來!
實現分析
說干就干,不就是爬取表情嗎,有什么困難的,等我把表情包收集齊了,我就是最靚的仔了。三十年河東,三十年河西,莫欺少年沒有圖
那么首先呢,我們遇到了第一個小困難就是,我們需要知道表情包的類型。就是說,不是所有的表情包都是gif動圖,肯定還有png格式的靜態圖,我們如何區分動圖和靜圖,也就是說,如何區分圖片的類型呢?
一個好的想法就是,通過正則表達式,把.png,.jpg,.gif的格式類型匹配出來,然后就能夠知道對應的類型了。不過呢,寫正則表達式有點麻煩,我想偷懶,于是就采用了一個更簡單的方法,也就是說,反正.png,.gif都是4個字母的,那我們就直接把后四個字符取出來不就解決了嗎?
好吧,但是偷懶也是有代價的,這個方法看起來很簡單,實則不行,因為結尾的格式一定是4個字符的嗎?比如說,如果遇到了.jpeg,怎么辦呢?是不是程序就出錯了呢?不要緊,我已經去查看過了,目標中沒有.jpeg格式的文件。但是現在沒有就能保證程序不出錯了嗎?當然不,如果以后有了.jpeg怎么辦呢?是不是就立刻出錯了呢?
對,說的沒錯,但是我就是不改,不過把我問題已經告訴你了,你可以自己嘗試對其進行簡單的修改,比如說加上一個if判斷,或者是正則表達式來改正這一錯誤
完整代碼展示
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"] + "個,已完成")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()正常運行以后,就可以看到消息提示了
隨后,通過查看文件,我們可以發現,表情包已經成功的保存了。太好了,現在我終于可以拿去聊天啦
自從上次的事情以后,不知道的參考這里,我都是非常謹慎小心的,避免影響到其他人的網站業務,因此,只爬取了非常有限的內容。如果這不能讓你滿意的話,你需要自己對程序進行修改。
嚴格遵守爬蟲的相關規定是非常重要的,如果因此帶來不便,請諒解!
總結
以上是生活随笔為你收集整理的妹子说我没有表情包?没关系通过python爬虫爬取表情的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP全栈学习笔记29
- 下一篇: python迭代法求极值_用Python