• 如果我要用Python偷表情包


    :smiley_cat: 开头先BB两句

    一个个手动保存图片吗?

    人生苦短,我用Python

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

    :rocket:斗图啦

    :rocket:斗图网

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

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

    :crown: 大体思路:

    requests.get() 
    爬取
    保存
    

    :gift: 知识点:

    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()
    

    :bicyclist: 结果

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

    :banana: Tips

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

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

    通过插件下载,比Python爬表情包快得多。

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

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

    手动狗头。

    :grin: 最后的话

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

  • 相关阅读:
    操作系统缓冲区管理(单缓冲,双缓冲,循环缓冲,缓冲池)
    Shell 脚本
    SpringBoot结合Vue.js+axios框架实现增删改查功能+网页端实时显示数据库数据(包括删除多条数据)
    TCP的三次握手和四次挥手
    Hystrix熔断降级
    【LeetCode:2520. 统计能整除数字的位数 | 模拟 | HashMap】
    selenium.common.exceptions.WebDriverException: Message: ‘chromedriver’ executable needs to be in PAT
    FPGA基本资源介绍
    java项目-第128期ssm+oracle的宿舍管理平台-java毕业设计_计算机毕业设计
    react-pdf预览在线PDF的使用
  • 原文地址:https://blog.csdn.net/m0_59485658/article/details/126587027