大数据采集之用python爬取 20w 表情包
沉沙 2019-10-14 来源 : 阅读 2072 评论 0

摘要:本篇文章探讨了大数据采集之用python爬取 20w 表情包,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章探讨了大数据采集之用python爬取 20w 表情包,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

大数据采集之用python爬取 20w 表情包


是这样的

有一次想要斗图

配图

就在网上搜索表情包

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

不小心动起了邪念

产生了兴趣

那就

把它们存下来吧

用 requests 请求了一下

发现这个网站没有做反爬

发现这里有 4k+ 的页面

简单的切换一下页面

可以发现

第一页的链接是这样的

https://fabiaoqing.com/biaoqing/lists/page/1.html

所以以此类推

构建一下所有url

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

这样我们就可以得到所有表情包的链接了

我们来看一下页面里面的信息

在这里

我们只需要图片的地址和图片的名称即可

所以我们只要获取到每个页面的

所有 img 标签就可以了

可以使用  BeautifulSoup 根据类名获取

response = requests.get(url)

拿到了页面里面的所有 img

那么就可以获取每个图片的地址和名称

从而下载到我们想要的位置

  for img in img_list:

至此

几行代码就搞定了

先来测试一下

下载一个页面的图片

可以发现

每张图片都获取到了

效果还行

不过

要下载那么多张表情包的话

这样写的代码有点慢了

还是开启多线程吧

对于这种 IO 操作

还是能加快不少下载时间的

 queue = Queue()

在这里创建了 DownloadBiaoqingbao 这个线程类

然后创建 10 个线程

把 url 添加到队列中

来运行一下

这时候文件夹就写入表情包啦

经过一段时间

小帅b的文件夹就存满了各种表情包了哈哈哈

谁敢跟我斗图

我就砸死他

不过呢

有个问题

文件夹里面的图片太多了

需要检索一下才行

比如我们要找到关于

小老弟

的表情包

那么我们可以使用 

glob

import globfor 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)

然后就可以在回复微信的时候发送图片给自己了

在这里就给自己发前 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

以上

当然还可以优化一下

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

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

自己去玩吧

大数据采集之用python爬取 20w 表情包

    本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程