源 / python教程 文 / 小雨
有一次想要斗图
就在网上搜索表情包
然后发现了一个表情巨多的网站
不小心动起了邪念
产生了兴趣
那就
把它们存下来吧
用 requests 请求了一下
发现这个网站没有做反爬
发现这里有 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:
先来测试一下
下载一个页面的图片
不过
要下载那么多张表情包的话
这样写的代码有点慢了
还是开启多线程吧
queue = Queue()
在这里创建了 DownloadBiaoqingbao 这个线程类
然后创建 10 个线程
把 url 添加到队列中
来运行一下
这时候文件夹就写入表情包啦
经过一段时间
文件夹就存满了各种表情包了
谁敢跟我斗图
我就砸死他
文件夹里面的图片太多了
需要检索一下才行
比如我们要找到关于"小老弟"的表情包
使用 glob
1import glob
2for name in glob.glob( /home/wistbean/biaoqingbao/*小老弟*.* ):
3 print(name)
通过 * 这个符号进行模糊匹配
运行一下可以得到所有含有“小老弟”的表情包
那么如何进一步用到微信来呢
使用微信的接口和 python 对接一下
我发送给我的微信说
"我要关于沙雕的表情包,发 6 张来"
python接收到指令
检索表情包并发送回我的微信
可以使用 itchat 这个模块
使用网页版微信的方式登录
1itchat.auto_login(hotReload=True)
2itchat.run()
运行这段代码可以得到二维码
扫一下就可以登录进去操作微信了
进行文件搜索
1imgs = []
2
3def searchImage(text):
4 print( 收到关键词: , text)
5 for name in glob.glob( /home/wistbean/biaoqingbao/* +text+ *.jpg ):
6 imgs.append(name)
然后就可以在回复微信的时候发送图片给自己了
在这里就给自己发前 6 张图片吧
1@itchat.msg_register([PICTURE, TEXT])
2def text_reply(msg):
3 searchImage(msg.text)
4 for img in imgs[:6]:
5 msg.user.send_image(img)
6 time.sleep(0.3)
7 print( 开始发送表情: , img)
8 imgs.clear()
但这里有个问题
itchat 在发送图片的时候
中文名的文件发了没有反应
后来发现是 requests 库的问题
修改它的 fields.py
1value = email.utils.encode_rfc2231(value, utf-8 )
2# value = %s*=%s % (name, value)
3value = %s="%s" % (name, value.encode( utf-8 ))
4
5也就是将
6
7value = %s*=%s % (name, value)
8
9改成
10
11value = %s="%s" % (name, value.encode( utf-8 ))
当然还可以优化一下
比如每次加载更多同类型的表情包
将表情包发送给特定的人等等
自己去玩吧
推荐阅读
CVPR多位主席联名公开信力挺华为:IEEE限制华为等评审参会,我们不!
Linux Shell 中的 ()、(())、[]、[[]]、{} 怎么用是不是还傻傻分不清?