用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

以上

固然还能够优化一下

好比每次加载更多同类型的表情包

将表情包发送给特定的人等等

本身去玩吧

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息