用python爬取 20w 表情包之后,感叹我族人是多么强大!

这样的

有一次想要斗图

配图

就在网上搜索表情包

然后发现了一个表情巨多的网站

不小心动起了邪念

产生了兴趣

那就

把它们存下来吧

用 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:

至此

几行代码就搞定了

大家在学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)

通过 * 这个符号进行模糊匹配

运行一下可以得到所有含有“小老弟”的表情包

到这里

已经有了大量的表情包

也可以通过关键词检索到表情包了

那么如何进一步用到微信来呢

嘿嘿,我得意的笑

开下脑洞

我们使用微信的接口和 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

以上

当然还可以优化一下

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

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

自己去玩吧

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以回答这个问题。Python 爬取表情包的代码可以使用 requests 库和 BeautifulSoup 库来实现。首先,使用 requests 库发送 HTTP 请求获取表情包网站的 HTML 页面,然后使用 BeautifulSoup 库解析 HTML 页面,提取出表情包的图片链接,最后使用 requests 库下载图片并保存到本地即可。 ### 回答2: Python爬取表情包代码具体步骤如下: 1. 首先,导入所需要的库,包括requests和bs4。 ```python import requests from bs4 import BeautifulSoup ``` 2. 通过requests库发送一个GET请求,获取目标网页的内容。 ```python url = "目标网页的URL" response = requests.get(url) ``` 3. 使用BeautifulSoup库对获取到的网页内容进行解析,以便后续提取所需要的信息。 ```python soup = BeautifulSoup(response.text, "html.parser") ``` 4. 找到表情包所在的位置,通常是通过查看网页元素或者查看网页源代码来确定。使用BeautifulSoup库的find_all()方法或者select()方法提取所需的标签信息。 ```python images = soup.find_all("img") ``` 5. 遍历提取到的标签信息,获取表情包的URL,并进行下载保存。 ```python for img in images: img_url = img["src"] # 下载图片并保存 response = requests.get(img_url) with open("表情包.jpg", "wb") as f: f.write(response.content) ``` 6. 完成爬取后,关闭文件流等资源。 ```python f.close() ``` 需要注意的是,为了成功进行表情包爬取,需要对目标网站进行适当的处理,如处理反爬机制、处理动态加载等。 ### 回答3: Python爬取表情包的代码主要分为以下几个步骤: 1. 引入所需模块:首先需要引入一些Python的库,例如requests库用于发送HTTP请求,beautifulsoup库用于解析HTML网页等。 2. 发送HTTP请求:使用requests库发送GET请求,获取表情包所在的网页内容。通常可以通过URL链接来访问表情包网页。 3. 解析HTML网页:使用beautifulsoup库解析网页内容,提取出表情包所在的页面元素,如图片链接、表情包标题等。可以利用beautifulsoup提供的选择器来定位特定的页面元素。 4. 下载表情包:通过提取到的图片链接,使用requests库发送GET请求,并保存图片到本地。 下面是一个示例代码: ```python import requests from bs4 import BeautifulSoup def crawl_emoticons(): # 发送HTTP请求,获取表情包所在的网页内容 url = "https://www.example.com/emoticons" response = requests.get(url) # 解析HTML网页,提取表情包的图片链接 soup = BeautifulSoup(response.content, 'html.parser') emoticon_elements = soup.select('.emoticon img') emoticon_urls = [elem['src'] for elem in emoticon_elements] # 下载表情包图片并保存到本地 for i, url in enumerate(emoticon_urls): image_response = requests.get(url) with open(f"emoticon_{i}.jpg", 'wb') as f: f.write(image_response.content) crawl_emoticons() ``` 以上代码仅为示例,具体的实现方式可能因网页结构和需求而有所差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值