您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

用 Python 来爬取表情包

时间:2022-07-23 11:29:07  来源:  作者:VT漫步

微信已经成为了我们大多数国人的聊天工具,在微信聊天中,选择合适的时机发送适当的表情,不仅可以丰富我们的聊天内容,而且还有化解尴尬、增进感情等等效果。而后浪们还会经常开启战斗模式——斗图。这时候谁的库存弹药充足谁就可获胜。今天我就用 Python/ target=_blank class=infotextkey>Python 来爬取表情包,希望为各位后浪青年的聊天储备弹药,为增进后浪青年的交流略尽绵薄之力。

选定目标

既然是要抓取表情供后浪青年使用,那么我们就要选择后浪青年喜欢的表情社区作为目标,这里我把我那毒辣的眼神瞄向了“斗图啦”,网址是 https://www.doutula.com/。

我们进入网站

我们的目标是补充弹药库,所以我们需要关注网站的最新表情。我选择爬取的模块是“最新表情”栏目

目标分析

既然确定了目标,接下来我们就需要对目标页面进行分析,进而选择合适的爬取方式。

获取页面内容

我们首先可以看到这个页面是以分页的形式展现内容的,那么首先应该想到的是点击不同分页,看看 URL 是否是有规律的。于是,我点击第二页,第三页,对应的 URL 分别是:
https://www.doutula.com/photo/list/?page=2 和 https://www.doutula.com/photo/list/?page=3。这就好办了,除了第一页,其他的页面 URL 是根据分页数有规律变化的,那么我们就可以通过直接请求 URL 来获取每一页内容。

解析页面内容解析页面内容

获取到每一页的内容之后,我们就可以对每一页的网页内容进行解析了。我们在页面点击右键,然后选择“显示源码”,来看看页面的源码是怎样的,从中找到解析内容的蛛丝马迹。最简单的方法是从页面中找到一个图片的名称,去源码页面搜索,我搜索之后的结果是这样的:

后浪青年的聊天,需要Python助威

 

我们很容易地看到每个图片都是一个 a 标签,从 a 标签中,我们可以获取到图片的 URL 以及图片的名称和后缀等信息。

下载图片

获取到图片的 URL 之后,我们只需要下载下来保存到本地目录就可以了。

代码实现

废话不多说,遵循目标分析的步骤,我直接将代码贴出来:

import threading
import requests
from lxml import etree
import os
import random
import time
from queue import Queue

headers = {
    'User-Agent': 'Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/62.0.3202.94 Safari/537.36',
    'cookie' : '你的cookie'
}


class Producer(threading.Thread):
    def __init__(self, page_queue, img_queue, *args, **kwargs):
        super(Producer, self).__init__(*args, **kwargs)
        self.page_queue = page_queue
        self.img_queue = img_queue

    def run(self):
        while True:
            if self.page_queue.empty():
                break
            # 休息几秒钟
            time.sleep(random.randint(1, 3))
            url = self.page_queue.get()
            self.parse_page(url)

    def parse_page(self, url):
        response = requests.get(url, headers=headers)
        text = response.text
        html = etree.HTML(text)
        imgs = html.xpath("//div[@class='random_picture']//a//img")
        for img in imgs:
            # 过滤动图
            if img.get('class') == 'gif':
                continue

            # 获取图片url
            img_url = img.xpath(".//@data-backup")[0]
            if img_url.split('.')[-1] == 'gif':
                continue

            # 获取图片后缀
            suffix = os.path.splitext(img_url)[1]

            # 获取图片名称
            alt = img.xpath(".//@alt")[0]
            
            img_name = alt + suffix
            self.img_queue.put((img_url, img_name))


class Consumer(threading.Thread):
    def __init__(self, page_queue, img_queue, *args, **kwargs):
        super(Consumer, self).__init__(*args, **kwargs)
        self.page_queue = page_queue
        self.img_queue = img_queue

    def run(self):
        while True:
            if self.img_queue.empty() and self.page_queue.empty():
                return

            img = self.img_queue.get(block=True)
            url, filename = img
            with open("./images/"+filename, 'wb') as f:
                f.write(requests.get(url, timeout=30, headers=headers).content)
                f.close()
                print(filename + ' 下载完成!')


def mAIn():
    # url队列
    page_queue = Queue(15)
    img_queue = Queue(20)
    page_queue.put('https://www.doutula.com/photo/list/')
    for x in range(2, 6):
        url = "https://www.doutula.com/photo/list/?page={}" .format(str(x))
        page_queue.put(url)

    for x in range(6):
        t = Producer(page_queue, img_queue)
        t.start()

    for x in range(6):
        t = Consumer(page_queue, img_queue)
        t.start()


if __name__ == '__main__':
    main()

我们的代码中使用了生产者消费者模式,各自使用了队列来实现。生产者不断从页面中获取图片链接,而消费者不断地下载这些获取到的图片到本地保存。

我这里为了方便,只爬取了5页的图片。运行代码(请将 cookie 改为你自己浏览器的 cookie),就会在代码同级目录下的 images 目录下生成图片了。生成完成后的目录是这样的:

后浪青年的聊天,需要Python助威

 

准备战斗

获取到弹药之后,我的小伙伴还没等到5秒钟,就开始战斗了

后浪青年的聊天,需要Python助威

 

有了这个程序之后,小伙伴再也不担心图穷了,想要弹药随时爬取。

总结

本文主要使用 python 来爬取“斗图啦”网站的最新表情,希望后浪们在获取源源不断的表情,与小伙伴斗得不亦乐乎的同时,不要忘记了掌握 python 的爬虫知识以及生产者消费者的设计模式.



Tags:   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
凌晨3点北京鬼市,天亮就消失,2大规矩:看货不问价,照货不照人
顾名思义,鬼市开市的时间节点在天明之前,至于起点有的是三更,有的是五更,并无一等。其实鬼市各地都有,只不过北京的鬼市更出名,就连老北京人也觉得这里阴森森的,却又很向往想去探险...【详细内容】
2024-04-19  Search:   点击:(3)  评论:(0)  加入收藏
老美怂了?美国众议院计划给予字节跳动额外180天出售TikTok
据外媒报道,迫使字节跳动剥离TikTok的新众议院法案将包括一项条款,赋予总统允许公司额外180天时间完成出售的自由裁量权。该法案已于3月13日获得众议院投票通过,预计将在周六放...【详细内容】
2024-04-19  Search:   点击:(4)  评论:(0)  加入收藏
Meta AI 全球市场扩张,并上线网页版 meta.ai
IT之家 4 月 19 日消息,Meta 公司近日宣布 Llama 3 大语言模型之外,扩展 Meta AI 服务到美国之外的 13 个国家和地区,还宣布上线专门的聊天网站:meta.ai。Meta 公司在新闻稿中表...【详细内容】
2024-04-19  Search:   点击:(2)  评论:(0)  加入收藏
重磅!Meta推出开源大模型Llama 3,性能直逼GPT-4
每经编辑:杜宇当地时间4月18日,AI 领域迎来重磅消息,Meta正式发布了人们等待已久的开源大模型Llama 3。与此同时,Meta首席执行官扎克伯格宣布:基于最新的Llama 3模型,Meta的AI助手...【详细内容】
2024-04-19  Search:   点击:(4)  评论:(0)  加入收藏
多地将禁止超标车上路,还可以选择骑行电摩,交警告诉你上牌流程
超标电动车由于不符合电动车的安全性能标准,存在着安全隐患,所以在过渡期结束以后,这种车辆将禁止上路行驶,接下来有多地将禁止超标电动车上路。广大车主除了选择电动自行车以外...【详细内容】
2024-04-19  Search:   点击:(3)  评论:(0)  加入收藏
喝完一瓶啤酒,多久才能开车?
首先,需要明确的是,酒驾是极其危险的行为,不仅危及自身安全,还可能威胁到他人生命。根据交通法规,当驾驶人血液中的酒精含量达到或超过20mg/100ml时,即被认定为酒驾,而超过80mg/100...【详细内容】
2024-04-19  Search:   点击:(2)  评论:(0)  加入收藏
古代富人都喜欢“扬州瘦马”,什么是“扬州瘦马”?说出来别不信
扬州的繁荣也催生了一些不道德的商机,其中之一就是“扬州瘦马”。这与其说是一个关于马的故事,不如说是一个关于封建社会对女性的摧残的故事。在中国古代,妇女地位低下,一些父母...【详细内容】
2024-04-19  Search:   点击:(4)  评论:(0)  加入收藏
夫妻一方可查询配偶财产状况,为何多地先后立法?
专家认为,这有助于保障妇女对婚姻财产的知情权。不过近年来实践发现,即便有地方出台类似规定,在现实的执行中仍会遭遇一些阻力,尤其是在查询房产和银行存款方面文|《财经》记者...【详细内容】
2024-04-19  Search:   点击:(3)  评论:(0)  加入收藏
“货币战争”开打?五大央行集体出动!
作者:暴哥来源:暴财经pro(ID:icaijing123)1997年东南亚金融危机重演?亚洲五大央行出手,绝不能让悲剧重来!1美元掀桌子,亚洲货币遭遇一场全面风暴!在《美元开始收割了!》一文中暴哥说过,...【详细内容】
2024-04-19  Search:   点击:(3)  评论:(0)  加入收藏
电影《变形金刚:起源》首支预告片发布:擎天柱、威震天还是好朋友
快科技4月19日消息,日前,1986年之后首部《变形金刚》动画电影《变形金刚:起源》发布首款预告片,影片暂定9月13日北美上映。该片将时间线拨回赛博坦时期,实现了观众一直以来期待的...【详细内容】
2024-04-19  Search:   点击:(2)  评论:(0)  加入收藏
▌简易百科推荐
一篇文章教会你使用Python中三种简单的函数
所谓函数,就是指:把某些特定功能的代码组成为一个整体,这个整体就叫做函数。一、函数简介所谓函数,就是指:把某些特定功能的代码组成为一个整体,这个整体就叫做函数。二、函数定义...【详细内容】
2024-04-11  Go语言进阶学习  微信公众号  Tags:Python   点击:(12)  评论:(0)  加入收藏
一篇文章带你了解Python的分布式进程接口
在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。一、前言在Thread和Process中,应当优...【详细内容】
2024-04-11  Go语言进阶学习    Tags:Python   点击:(10)  评论:(0)  加入收藏
Python 可视化:Plotly 库使用基础
当使用 Plotly 进行数据可视化时,我们可以通过以下示例展示多种绘图方法,每个示例都会有详细的注释和说明。1.创建折线图import plotly.graph_objects as go# 示例1: 创建简单...【详细内容】
2024-04-01  Python技术    Tags:Python   点击:(15)  评论:(0)  加入收藏
Python 办公神器:教你使用 Python 批量制作 PPT
介绍本文将介绍如何使用openpyxl和pptx库来批量制作PPT奖状。本文假设你已经安装了python和这两个库。本文的场景是:一名基层人员,要给一次比赛活动获奖的500名选手制作奖状,并...【详细内容】
2024-03-26  Python技术  微信公众号  Tags:Python   点击:(21)  评论:(0)  加入收藏
Python实现工厂模式、抽象工厂,单例模式
工厂模式是一种常见的设计模式,它可以帮助我们创建对象的过程更加灵活和可扩展。在Python中,我们可以使用函数和类来实现工厂模式。一、Python中实现工厂模式工厂模式是一种常...【详细内容】
2024-03-07  Python都知道  微信公众号  Tags:Python   点击:(38)  评论:(0)  加入收藏
不可不学的Python技巧:字典推导式使用全攻略
Python的字典推导式是一种优雅而强大的工具,用于创建字典(dict)。这种方法不仅代码更加简洁,而且执行效率高。无论你是Python新手还是有经验的开发者,掌握字典推导式都将是你技能...【详细内容】
2024-02-22  子午Python  微信公众号  Tags:Python技巧   点击:(43)  评论:(0)  加入收藏
如何进行Python代码的代码重构和优化?
Python是一种高级编程语言,它具有简洁、易于理解和易于维护的特点。然而,代码重构和优化对于保持代码质量和性能至关重要。什么是代码重构?代码重构是指在不改变代码外部行为的...【详细内容】
2024-02-22  编程技术汇    Tags:Python代码   点击:(44)  评论:(0)  加入收藏
Python开发者必备的八个PyCharm插件
在编写代码的过程中,括号几乎无处不在,以至于有时我们会拼命辨别哪个闭合括号与哪个开头的括号相匹配。这款插件能帮助解决这个众所周知的问题。前言在PyCharm中浏览插件列表...【详细内容】
2024-01-26  Python学研大本营  微信公众号  Tags:PyCharm插件   点击:(92)  评论:(0)  加入收藏
Python的Graphlib库,再也不用手敲图结构了
Python中的graphlib库是一个功能强大且易于使用的工具。graphlib提供了许多功能,可以帮助您创建、操作和分析图形对象。本文将介绍graphlib库的主要用法,并提供一些示例代码和...【详细内容】
2024-01-26  科学随想录  微信公众号  Tags:Graphlib库   点击:(95)  评论:(0)  加入收藏
Python分布式爬虫打造搜索引擎
简单分布式爬虫结构主从模式是指由一台主机作为控制节点负责所有运行网络爬虫的主机进行管理,爬虫只需要从控制节点那里接收任务,并把新生成任务提交给控制节点就可以了,在这个...【详细内容】
2024-01-25  大雷家吃饭    Tags:Python   点击:(63)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条