用python爬取 20w 表情包以後,感嘆我族人是多麼強大!

是這樣的 html

有一次想要鬥圖python

配圖微信

就在網上搜索表情包多線程

而後發現了一個表情巨多的網站 app

不當心動起了邪念學習

產生了興趣測試

那就優化

把它們存下來吧 網站

用 requests 請求了一下url

發現這個網站沒有作反爬

發現這裏有 4k+ 的頁面

簡單的切換一下頁面

能夠發現

第一頁的連接是這樣的

https://fabiaoqing.com/biaoqi...

因此以此類推

構建一下全部url

_url = 'https://fabiaoqing.com/biaoqing/lists/page/{page}.html'

這樣咱們就能夠獲得全部表情包的連接了

咱們來看一下頁面裏面的信息

在這裏

咱們只須要圖片的地址和圖片的名稱便可

因此咱們只要獲取到每一個頁面的

全部 img 標籤就能夠了

能夠使用  BeautifulSoup 根據類名獲取

response = requests.get(url)

拿到了頁面裏面的全部 img

那麼就能夠獲取每一個圖片的地址和名稱

從而下載到咱們想要的位置

for img in img_list:

至此

幾行代碼就搞定了
你們在學python的時候確定會遇到不少難題,以及對於新技術的追求,這裏推薦一下咱們的Python學習扣qun:784,758,214,這裏是python學習者彙集地!
先來測試一下

下載一個頁面的圖片

能夠發現

每張圖片都獲取到了

效果還行

不過

要下載那麼多張表情包的話

這樣寫的代碼有點慢了

仍是開啓多線程吧

對於這種 IO 操做

仍是能加快很多下載時間的

queue = Queue()

在這裏建立了 DownloadBiaoqingbao 這個線程類

而後建立 10 個線程

把 url 添加到隊列中

來運行一下

這時候文件夾就寫入表情包啦

通過一段時間

小帥b的文件夾就存滿了各類表情包了哈哈哈

誰敢跟我鬥圖

我就砸死他

不過呢

有個問題

文件夾裏面的圖片太多了

須要檢索一下才行

好比咱們要找到關於

小老弟

的表情包

那麼咱們能夠使用 

glob

import glob
for name in glob.glob('/home/wistbean/biaoqingbao/*小老弟*.*'):
    print(name)

經過 * 這個符號進行模糊匹配

運行一下能夠獲得全部含有「小老弟」的表情包

image

到這裏

已經有了大量的表情包

也能夠經過關鍵詞檢索到表情包了

那麼如何進一步用到微信來呢

嘿嘿,我得意的笑

開下腦洞

咱們使用微信的接口和 python 對接一下

好比

我發送給個人微信說

我要關於沙雕的表情包,發 6 張來

這個時候

python接收到指令

而後就去檢索表情包

發送回個人微信

能夠使用 itchat 這個模塊

使用網頁版微信的方式登陸

itchat.auto_login(hotReload=True)
itchat.run()

運行這段代碼能夠獲得二維碼

掃一下就能夠登陸進去操做微信了

接着就能夠根據小帥b發送過來的關鍵詞

進行文件搜索

imgs = []

def searchImage(text):
    print('收到關鍵詞: ', text)
    for name in glob.glob('/home/wistbean/biaoqingbao/*'+text+'*.jpg'):
        imgs.append(name)
你們在學python的時候確定會遇到不少難題,以及對於新技術的追求,這裏推薦一下咱們的Python學習扣qun:784758214,這裏是python學習者彙集地!

而後就能夠在回覆微信的時候發送圖片給本身了

在這裏就給本身發前 6 張圖片吧

@itchat.msg_register([PICTURE, TEXT])
def text_reply(msg):
    searchImage(msg.text)
    for img in imgs[:6]:
        msg.user.send_image(img)
        time.sleep(0.3)
        print('開始發送表情:', img)
    imgs.clear()

但這裏有個問題

就是 itchat 在發送圖片的時候

中文名的文件發了沒有反應

後來小帥b發現是 requests 庫的問題

修改它的 fields.py

value = email.utils.encode_rfc2231(value, 'utf-8')
    # value = '%s*=%s' % (name, value)
    value = '%s="%s"' % (name, value.encode('utf-8'))

也就是將

value = '%s*=%s' % (name, value)

改爲

value = '%s="%s"' % (name, value.encode('utf-8'))

ok

搞定

ok

以上

固然還能夠優化一下

好比每次加載更多同類型的表情包

將表情包發送給特定的人等等

本身去玩吧

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息