【简简单单来个spider小案例吧】获取emoji表情包

12 篇文章 6 订阅
2 篇文章 5 订阅

 🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝

🥰 博客首页:knighthood2001

😗 欢迎点赞👍评论🗨️

❤️ 热爱python,期待与大家一同进步成长!!❤️

        在平时写博客的时候,为了让博客内容更加丰富,会使用到各种各样的表情包。 如上,笔者也用了许多emoji表情包,有些表情包还挺不错的。

        笔者想看一下emoji表情包放在一起的画面,因此写了一个spider爬取emoji表情包与标题名。最后发现其实挺震撼的。

        因此我将获得的emoji表情已经放到【emoji大全宝典】中。


目录

一、实现过程

1.1网址获取

1.2文件创建 

1.3emoji爬取讲解

1.3.1大致思路

1.3.2模块准备

1.3.3开干

1.3.4文件保存(md、txt)

拓展知识1

拓展知识2

1.3.5全部代码展示

1.4emoji口袋爬取

1.4.1emoji文案爬取 

1.4.2全部代码展示

二、总结


一、实现过程

1.1网址获取

emoji网址:🤣 Emoji表情大全,颜文字百科 💌 - EmojiXD

如图,该网址其中的表情包分类大致可以分为两类,点击右边查看所有口袋(如下图)

这是emoji口袋的网址: 颜文字口袋 - Emoji收藏合集 - EmojiXD

以上两个网址就是我们需要进入的主网址。我们也是根据这两个网址进行获取具体emoji表情。

1.2文件创建 

如上,emoji爬取创建两个目录emojiemoji_pockets,其中有request_emoji.pyrequest_emoji_pockets.py两个python文件。

1.3emoji爬取讲解

https://emojixd.com/

以上就是我们要进行爬取的网址,

随意点击一块区域,进入新的网址

  

我们可以看到一类一类的emoji表情。

因此我们可以得出爬取emoji表情的大致思路。

1.3.1大致思路

        我们首先获取到主网址中每一块区域所对应的网址,如上图中的表情与情感、人物与身体、动物与自然等,然后进入具体的区域,如进入表情与情感网页,爬取相关的表情!!


1.3.2模块准备

import requests
import re

项目比较简单,只需要用到requests模块和re模块即可


1.3.3开干

url = 'https://emojixd.com'
response = requests.get(url)
print(response.text)

打印出来的就是网页源代码,要是觉得看这个不太方便买也可以在emoji网站右键,查看网页源代码

注意:点的是查看网页源代码而不是检查,检查中的内容是经过css等渲染后的内容,与源代码还是有点区别的。 

这里我选择查看网页源代码,我们可以发现每一块区域,都有相对应的网址(如下图)。

在爬虫中,我们可以采用正则表达式精准的找出匹配的内容,如果需要重温python正则表达式的,可以看一下我之前写的。

重识python正则表达式(re模块)https://blog.csdn.net/knighthood2001/article/details/124539352?spm=1001.2014.3001.5502代码如下:

a = re.findall('<a class="group-header center p1" href="(.*?)">', response.text)
print(a)
'''['/group/smileys-emotion', '/group/people-body', '/group/animals-nature', 
'/group/food-drink','/group/travel-places', '/group/activities', '/group/objects', 
'/group/symbols', '/group/flags']'''

re.findall()返回的是列表的数据类型 

由于旗帜区域中包含的几乎全是如下内容,因此我就不爬取这里的信息了

旗帜板块在所要爬取区域的最后,而列表的最后元素从右往左数的位置为-1。

代码如下:

for b in a[:-1]:
    # print(b)
    base_url = url + b
    # print(base_url)
    new_response = requests.get(base_url)
    # print(new_response.text)
    emoji = re.findall('<div class="emoji left mr2 h1">(.*?)</div> ', new_response.text)
    title = re.findall('<p class="truncate" title=".*?">(.*?)</p>', new_response.text)
    # print(emoji)
    # print(title)

讲解:①a[:-1]表示包含开头到倒数第二个内容的列表。;

注意:这里的-1不取到

②接下来进行拼接url,将其拼接成包含具体emoji表情的网址;

③接下来对具体url进行查看网页源代码操作,然后进行找规律,

发现我们需要的表情和表情所对应的标题如下

<div class="emoji left mr2 h1">😃</div>

<p class="truncate" title="哈哈">哈哈</p> 

因此我们编写正则表达式进行提取。

打印出来如下图:

可以发现,有些emoji表情有色彩,有些则是镂空形态,有些则显示像'\U0001f9c4'这样的内容。

不过不用慌, 我们只要将它们保存到文件即可


1.3.4文件保存(md、txt)

①保存为txt文件

如下图所示,这里笔者分两个txt文件进行存储,一个文件中全是emoji表情,另一个文件中存储的是emoji表情及其对应的title。

代码如下:

    for i in emoji:
        with open('emoji.txt', 'a', encoding='utf-8') as f:
            f.write(i)

    for i, j in zip(emoji, title):
        # print(i+j)
        with open('title_emoji.txt', 'a', encoding='utf-8') as f:
            f.write(i + j)

拓展知识1:

由于爬取的emojititle是用re.findall()函数获得的,因此其是一个列表,我们要是将它一一对应的排序,我们可以使用zip()函数,将其中的元素一一对应。 

拓展知识2:

今后大家在使用zip()的时候可能会遇到,

    c = zip(emoji, title)
    print(c)

返回结果如下 

这不是我们想要的结果,查阅资料才知道,

原因是为了节约内存,python3基于此对此进行了优化,输出只输出对象的内存位置而不打印出来。而在python2中可以直接输出到屏幕

解决方法就是加个list() 

    c = zip(emoji, title)
    print(c)
    print(list(c))

这样就得到了我们需要的内容。 


        不过保存为txt文件,在阅读的时候是没有颜色的,虽然复制后,在聊天软件粘贴时显示了彩色。不过这不太方便。因此笔者尝试着将其保存为md文件。

②保存为md文件

代码和上面一样,只需将文件后缀改成.md即可

    for i in emoji:
        with open('emoji.md', 'a', encoding='utf-8') as f:
            f.write(i)

    for i, j in zip(emoji, title):
        # print(i+j)
        with open('title_emoji.md', 'a', encoding='utf-8') as f:
            f.write(i + j)

编辑器在左,预览区在右。当然你也可以设置为仅预览区(如下图)。

至此,我才发现md文件这么强大。 


1.3.5全部代码展示

# -*- coding: utf-8-*-
import requests
import re

url = 'https://emojixd.com'
response = requests.get(url)
# print(response.text)
a = re.findall('<a class="group-header center p1" href="(.*?)">', response.text)
# print(a)
'''['/group/smileys-emotion', '/group/people-body', '/group/animals-nature', 
'/group/food-drink','/group/travel-places', '/group/activities', '/group/objects', 
'/group/symbols', '/group/flags']'''
for b in a[:-1]:
    # print(b)
    base_url = url + b
    # print(base_url)
    new_response = requests.get(base_url)
    # print(new_response.text)
    emoji = re.findall('<div class="emoji left mr2 h1">(.*?)</div> ', new_response.text)
    title = re.findall('<p class="truncate" title=".*?">(.*?)</p>', new_response.text)
    # print(emoji)
    # print(title)

    for i in emoji:
        with open('emoji.txt', 'a', encoding='utf-8') as f:
            f.write(i)

    for i, j in zip(emoji, title):
        # print(i+j)
        with open('title_emoji.txt', 'a', encoding='utf-8') as f:
            f.write(i + j)

    for i in emoji:
        with open('emoji.md', 'a', encoding='utf-8') as f:
            f.write(i)

    for i, j in zip(emoji, title):
        # print(i+j)
        with open('title_emoji.md', 'a', encoding='utf-8') as f:
            f.write(i + j)

1.4emoji口袋爬取

内容与1.3emoji爬取中的内容类似,代码如下

# -*- coding: utf-8-*-
import requests
import re
url = "https://emojixd.com/pockets"
response = requests.get(url)
# print(response.text)
a = re.findall('<a class="pocket mx1" href="(.*?)">', response.text)
# print(a)
'''['/pocket/mid-autumn-2020', '/pocket/freedom', '/pocket/qingming', '/pocket/science', 
'/pocket/invest', '/pocket/Arbor_Day', '/pocket/customer_first', '/pocket/spring', 
'/pocket/i_love_work', '/pocket/hero', '/pocket/womensday', '/pocket/insomnia', 
'/pocket/cooking', '/pocket/jingzhe', '/pocket/child_at_home', '/pocket/lovely_cat', 
'/pocket/online_work', '/pocket/keep_slim', '/pocket/keep_fit', '/pocket/baking', 
'/pocket/womens_day', '/pocket/control-disease', '/pocket/on_the_way', '/pocket/new-year', 
'/pocket/christmas', '/pocket/tired', '/pocket/party', '/pocket/chinese-zodiac', 
'/pocket/thanksgiving', '/pocket/halloween', '/pocket/love', '/pocket/congratulations', 
'/pocket/journey', '/pocket/holidays', '/pocket/hearts', '/pocket/zodiac']
'''
for b in a:
    base_url = 'https://emojixd.com' + b
    print(base_url)
    new_response = requests.get(base_url)
    emoji = re.findall('<div class="emoji left mr2 h1">(.*?)</div> ', new_response.text)
    title = re.findall('<p class="truncate" title=".*?">(.*?)</p>', new_response.text)
    print(emoji)
    print(title)

    for i in emoji:
        with open('emoji_pockets.md', 'a', encoding='utf-8') as f:
            f.write(i)

    for i, j in zip(emoji, title):
        print(i+j)
        with open('title_emoji_pockets.md', 'a', encoding='utf-8') as f:
            f.write(i + j)

1.4.1emoji文案爬取 

不过我在一些板块中发现了emoji文案,觉得有趣,也爬取下来了。

查看网页源代码,文案在这里。因此编写正则表达式。并保存文件为md。

    text = re.findall('<div class="clearfix notification h5 mx1 mt2"><p>(.*?)</p>', new_response.text, re.S)
    print(text)
    for j in text:
        with open('text.md', 'a', encoding='utf-8') as f:
            f.write(j)

爬下来的文案看着非常乱,因为全部连在一起。

因此我们加两个换行(具体markdown的写法笔者也不是太熟悉,自己也是尝试出来的)

    text = re.findall('<div class="clearfix notification h5 mx1 mt2"><p>(.*?)</p>', new_response.text, re.S)
    print(text)
    for j in text:
        with open('text.md', 'a', encoding='utf-8') as f:
            f.write(j)
            f.write('\n')
            f.write('\n')

这样就显得比较有序了。

至此,爬取emoji表情全部大功告成。


1.4.2全部代码展示

# -*- coding: utf-8-*-
import requests
import re
url = "https://emojixd.com/pockets"
response = requests.get(url)
# print(response.text)
a = re.findall('<a class="pocket mx1" href="(.*?)">', response.text)
# print(a)
'''['/pocket/mid-autumn-2020', '/pocket/freedom', '/pocket/qingming', '/pocket/science', 
'/pocket/invest', '/pocket/Arbor_Day', '/pocket/customer_first', '/pocket/spring', 
'/pocket/i_love_work', '/pocket/hero', '/pocket/womensday', '/pocket/insomnia', 
'/pocket/cooking', '/pocket/jingzhe', '/pocket/child_at_home', '/pocket/lovely_cat', 
'/pocket/online_work', '/pocket/keep_slim', '/pocket/keep_fit', '/pocket/baking', 
'/pocket/womens_day', '/pocket/control-disease', '/pocket/on_the_way', '/pocket/new-year', 
'/pocket/christmas', '/pocket/tired', '/pocket/party', '/pocket/chinese-zodiac', 
'/pocket/thanksgiving', '/pocket/halloween', '/pocket/love', '/pocket/congratulations', 
'/pocket/journey', '/pocket/holidays', '/pocket/hearts', '/pocket/zodiac']
'''
for b in a:
    base_url = 'https://emojixd.com' + b
    # print(base_url)
    new_response = requests.get(base_url)
    emoji = re.findall('<div class="emoji left mr2 h1">(.*?)</div> ', new_response.text)
    title = re.findall('<p class="truncate" title=".*?">(.*?)</p>', new_response.text)
    # print(emoji)
    # print(title)

    for i in emoji:
        with open('emoji_pockets.md', 'a', encoding='utf-8') as f:
            f.write(i)

    for i, j in zip(emoji, title):
        # print(i+j)
        with open('title_emoji_pockets.md', 'a', encoding='utf-8') as f:
            f.write(i + j)

    text = re.findall('<div class="clearfix notification h5 mx1 mt2"><p>(.*?)</p>', new_response.text, re.S)
    print(text)
    for j in text:
        with open('text.md', 'a', encoding='utf-8') as f:
            f.write(j)
            f.write('\n')
            f.write('\n')

二、总结

        ①本次爬虫案例比较简单,不涉及到cookie、headers等知识。大家可以自己去试试。该网址当python爬虫案例挺不错的。

        ②在学习爬虫的时候,还可以巩固一下正则表达式的相关知识(遇事不会,.*?无敌)

        ③❤️❤️❤️觉得笔者写的不错的,希望三连支持一下!!❤️❤️❤️ 

评论 148
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

knighthood2001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值