妹子说我没有表情包?没关系通过python爬虫爬取表情

需求分析

昨天,我被一个妹子嘲笑了,“仙草,你天天聊天,怎么连一个表情包都没有啊?每次发也是用系统推荐的默认表情,和一个土狗似的,笑死人了。”

啊这,确实,我从来都不保存表情,所以每次聊天要么就是转发别人的,要么就是输入几个字,看看系统会不会给我推荐表情,确实是有点不太行

我虚心请教(中路对狙),“那你的表情包是哪里来的啊?不会是和别人聊天的时候偷来的吧,那可是有够丢脸的呢!“

妹子不屑一顾,”切,你说的什么啊,看到好看的表情收藏起来不是很正常的事情吗?像你一样没几个好友,恐怕也没有表情可以收藏吧?“

好吧,我想她说的没错。可是谁说收藏表情一定要通过和别人聊天呢?我们可以直接通过python的爬虫程序,把表情包爬取下来!

实现分析

说干就干,不就是爬取表情吗,有什么困难的,等我把表情包收集齐了,我就是最靓的仔了。三十年河东,三十年河西,莫欺少年没有图

那么首先呢,我们遇到了第一个小困难就是,我们需要知道表情包的类型。就是说,不是所有的表情包都是gif动图,肯定还有png格式的静态图,我们如何区分动图和静图,也就是说,如何区分图片的类型呢?

一个好的想法就是,通过正则表达式,把.png,.jpg,.gif的格式类型匹配出来,然后就能够知道对应的类型了。不过呢,写正则表达式有点麻烦,我想偷懒,于是就采用了一个更简单的方法,也就是说,反正.png,.gif都是4个字母的,那我们就直接把后四个字符取出来不就解决了吗?

好吧,但是偷懒也是有代价的,这个方法看起来很简单,实则不行,因为结尾的格式一定是4个字符的吗?比如说,如果遇到了.jpeg,怎么办呢?是不是程序就出错了呢?不要紧,我已经去查看过了,目标中没有.jpeg格式的文件。但是现在没有就能保证程序不出错了吗?当然不,如果以后有了.jpeg怎么办呢?是不是就立刻出错了呢?

对,说的没错,但是我就是不改,不过把我问题已经告诉你了,你可以自己尝试对其进行简单的修改,比如说加上一个if判断,或者是正则表达式来改正这一错误

完整代码展示

import requests
import time
from parsel import Selector
from threading import Thread
from queue import Queue
from base64 import b64decode


url = b64decode("aHR0cDovL3d3dy5iYnNuZXQuY29tL2dhb3hpYW8=").decode()
headers = {"user-agent": "Mozilla/5.0"}
q = Queue()


def put_img():
    r = requests.get(url, headers=headers)
    s = Selector(r.text)
    al = s.xpath("//div[@class='thumbnail']/a")
    num = 1
    for a in al:
        src = a.xpath("./img/@src").get()
        title = a.xpath("./img/@alt").get()
        q.put({
            "num": str(num),
            "src": src,
            "title": title
        })
        num += 1


def get_img():
    while True:
        img = q.get()
        r = requests.get(img["src"], headers=headers)
        with open(img["num"] + img["src"][-4::], "wb") as f:
            f.write(r.content)
        q.task_done()
        time.sleep(1)
        print(img["num"] + "个,已完成")


t_put = Thread(target=put_img)
t_get = Thread(target=get_img)
t_get.setDaemon(True)
t_put.start()
t_get.start()
t_put.join()
q.join()

正常运行以后,就可以看到消息提示了

随后,通过查看文件,我们可以发现,表情包已经成功的保存了。太好了,现在我终于可以拿去聊天啦


自从上次的事情以后,不知道的参考这里,我都是非常谨慎小心的,避免影响到其他人的网站业务,因此,只爬取了非常有限的内容。如果这不能让你满意的话,你需要自己对程序进行修改。

严格遵守爬虫的相关规定是非常重要的,如果因此带来不便,请谅解!

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值