likes
comments
collection
share

如果我要用Python偷表情包

作者站长头像
站长
· 阅读数 3

😺 开头先BB两句

一个个手动保存图片吗?

人生苦短,我用Python

下面是两个充满表情包的网址:

🚀斗图啦

🚀斗图网

爬取表情包,用到的关键代码,拿出来简单说一下。

毕竟,我对Python也不是很熟,用到什么就马克记录一下下。

👑 大体思路:

  1. 通过requests.get() 发送get请求
  2. 拿到爬取的网页数据,然后找到其中的表情包
  3. 把表情包保存至本地文件夹中

🎁 知识点:

1.requests库

requests.get() 

发送get请求

安装

pip install requests

引入

import requests

requests带请求参数的get请求

url = 'http://www.bbsnet.com/biaoqingbao'
res = requests.get(url)

修改编码方式:

response.content.deocde(“utf-8”)

html = res.content.decode(('utf-8'))

2.lxml模块etree类的使用

安装

pip install lxml

引入

from lxml import etree

利用etree.HTML()将html字符串转化为element对象

tree = etree.HTML(html)

element对象的xpath方法

Element对象具有xpath的方法,返回结果的列表,能够接受bytes类型的数据和str类型的数据

xpath 全称:XML Path Language是一种小型的查询语言

是一门在XML文档中查找信息的语言

XPath的优点:

可在XML中查找信息

支持HTML的查找

可通过元素和属性进行导航

根据爬取的网页数据,分析所知,表情包图片在 id 为 post_container 的列表里面,通过 xpath 可以精确查到表情包的位置。

li_list = tree.xpath('//ul[@id="post_container"]/li')

3.Python "{}.format()" 输出格式化方法

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。

实例:

"{0} {1}".format("hello", "world")  # 设置指定位置

也可以设置参数:

print("网站名:{name}, 地址 {url}".format(name="哔哩哔哩", url="https://www.bilibili.com/"))

4.with open() as f:用法

python中open() 函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写。

with 关键字

可以在语句结束后,关闭文件流。不用with关键字,文件会被python垃圾回收关闭。不用with,记得f.close()

常见用法:

with open(r'filename.txt') as f:
    for l in f:
        l = json.loads(l)  #文件的读操作

with open('Hello.txt', 'w') as f:
   f.write('hello world')  #文件的写操作

标识符

with open('Hello.txt', 'w') as f: #为标识符

常用标识符的含义

r:  以只读方式打开文件。
rb: 以二进制格式打开一个文件用于只读。
r+: 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+:以二进制格式打开一个文件用于读写。
w:  打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb:  以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+:  打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+:以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a:打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab:  以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+:  打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

f的方法属性:

file.read([size])   #将文件数据作为字符串返回,可选参数size控制读取的字节数
file.readlines([size])   #返回文件中行内容的列表,size参数可选
file.write(str)   #将字符串写入文件
file.writelines(strings)   #将字符串序列写入文件
file.close()   #关闭文件
file.closed    #表示文件已经被关闭,否则为False

file.mode  #Access文件打开时使用的访问模式
file.encoding  #文件所使用的编码
file.name  #文件名
file.newlines  #未读取到行分隔符时为None,只有一种行分隔符时为一个字符串,当文件有多种类型的行结束符时,则为一个包含所有当前所遇到的行结束的列表
file.softspace  #为0表示在输出一数据后,要加上一个空格符,1表示不加。这个属性一般程序员用不着,由程序内部使用

完整代码,点击详细信息查看

import requests
from lxml import etree
class EmojiSpider(object):
    # 第一种方法__init__()方法是一种特殊的方法,
    # 被称为类的构造函数或初始化方法,
    # 当创建了这个类的实例时就会调用该方法
    def __init__(self):
        self.header = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
        }
        self.name = 1
    def get(self, url):
        res = requests.get(url, headers=self.header)
        html = res.content.decode(('utf-8'))
        return  html
    def parse_picture(self, html):
        tree = etree.HTML(html)
        li_list = tree.xpath('//ul[@id="post_container"]/li')
        img_list = []
        for li in li_list:
            img_url = li.xpath('./div/a/img/@src')
            for img in img_url:
                img_list.append(img)
        return img_list;
    def save(self, img_list):
        for img in img_list:
            response = requests.get(img)
            filename = './img/表情{}.gif'.format(self.name)
            print('正在爬取第{}张表情包'.format(self.name))
            # with open用法
            # 上下文管理
            # 使用with关键字,上下文管理针对的是with后的对象
            # 使用with... as 关键字
            # 上下文管理的语句块并不会开启新的作用域
            # 文件对象上下文管理1.进入with时,with后的文件对象是被管理对象
            # as子句后的标识符,指向with后的文件对象
            # with语句块执行完的时候,会自动关闭文件对象
            with open(filename, 'wb') as f:
                f.write(response.content)
            self.name += 1
    def main(self):
        url = 'http://www.bbsnet.com/biaoqingbao'
        html = self.get(url);
        save_list = self.parse_picture(html)
        self.save(save_list)
if __name__ == '__main__':
    e = EmojiSpider();
    e.main()

如果我要用Python偷表情包

🚴 结果

运行Python文件,如你所愿,表情包乖乖的跑到了我的文件夹里面。

如果我要用Python偷表情包

🍌 Tips

除此之外,还可以在Chrome浏览器上安装扩展程序。

插件:图片助手(ImageAssistant) 批量图片下载。

如果我要用Python偷表情包 通过插件下载,比Python爬表情包快得多。

人生苦短,我用图片助手(ImageAssistant)

不要浪费你宝贵的时间学习 Python 

手动狗头。

😁 最后的话

以上,如果对你有用的话,不妨点赞收藏关注一下,谢谢 🙏