最适合零基础的爬虫教程,从零开始教你爬取十万表情包。非常简单。

2023-11-08

前言

事情要从几天前说起,我有一个朋友,他在和他喜欢的小姐姐聊天时,聊天的气氛一直非常尬,这时他就想发点表情包来缓和一下气氛,但一看自己的表情包收藏都是这样的。。。


。。。这发过去,基本就直接和小姐姐说拜拜了,然后他就向我求救问我有没有表情包,表情包我是没有,但网站有呀,来来,爬虫整起。

分析页面

今天爬取的网站是斗图吧,有一说一表情包是真的多,看这惊人的页数


接下来就该看看怎么拿到表情包图片的url了,首先打开谷歌浏览器,然后点F12进入爬虫快乐模式

然后完成下图的操作,先点击1号箭头,然后再选中一个表情包即可,红色框中就是我们要爬取的对象,其中表情包的src就在里面

现在我们就搞清楚了怎么拿到表情包的url了,就开始写代码了

具体实现

解析页面

获取网页内容

这里就是获取爬取网页的信息

def askURL(url):
    head = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36"
    }
    req = urllib.request.Request(url=url, headers=head)
    html = ""
    try:
        response = urllib.request.urlopen(req)
        html = response.read()
    except Exception as result:
        print(result)
    return html

解析网页内容

# 取出图片src的正则式imglink = re.compile(
    r'<img alt="(.*?)" class="img-responsive lazy image_dta" data-backup=".*?" data-original="(.*?)" referrerpolicy="no-referrer" src=".*?"/>',
    re.S)def getimgsrcs(url):
    html = askURL(url)
    bs = BeautifulSoup(html, "html.parser")
    names = []
    srcs = []
    # 找到所有的img标签
    for item in bs.find_all('img'):
        item = str(item)
        # 根据上面的正则表达式规则把图片的src以及图片名拿下来
        imgsrc = re.findall(imglink, item)
        # 这里是因为拿取的img标签可能不是我们想要的,所以匹配正则规则之后可能返回空值,因此判断一下
        if (len(imgsrc) != 0):
            imgname = ""
            if imgsrc[0][0] != '':
                imgname = imgsrc[0][0] + '.' + getFileType(imgsrc[0][1])
            else:
                imgname = getFileName(imgsrc[0][1])
            names.append(imgname)
            srcs.append(imgsrc[0][1])
    return names, srcs

到现在为止,已经拿到了所有的图片的链接和名字,那么就可以开始下载了

文件下载

多线程下载

因为文件实在有点多,所以最好采用多线程的方式下载,我这里只是给了一个样例,大家按照这个逻辑写一下就好

 pool = ThreadPoolExecutor(max_workers=50)
         for j in range(len(names)):
            pool.submit(FileDownload.downloadFile, urls[j], filelocation[j])

成果

总共是爬了十万多张表情包,这次咱也是表情包大户了

是不是非常简单,需要完整代码关注下方公众号哦! 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最适合零基础的爬虫教程,从零开始教你爬取十万表情包。非常简单。 的相关文章

随机推荐

  • Qt:开源与商业版区别,以及LGPL和闭源程序

    Qt 开源与商业版区别 以及LGPL和闭源程序 Qt是一个跨平台的C 应用程序框架 使用简单 功能强大 Qt分为开源版本和商业版本 两个版本之间有很多不同之处 本文将详细介绍Qt的开源版本和商业版本的区别 以及两种许可证 LGPL和闭源程序
  • sctp 编程接口指南

    SCTP 套接字接口 当 socket 调用为 IPPROTO SCTP 创建套接字时 它会调用特定于 SCTP 的套接字创建例程 针对 SCTP 套接字执行的套接字调用会自动调用相应的 SCTP 套接字例程 在一对一套接字中 每个套接字都
  • conda使用yml配置文件,复制环境,导出环境

    首先 conda是python虚拟环境管理的软件 对于代码需要迁移到别的机器上时 采用配置文件收集环境依赖 这样 将代码迁移的另一个机器时 使用一条命令一次性安装 快速复现代码 更加方便简洁 能很大程度上减少环境迁移 安装错误版本导致的版本
  • xBranch——新一代金融前端系统

    xBranch是集设计开发 测试部署和运维于一体的金融前端系统实施环境 充分体现了体验良好 实施快捷 成本较低 易于整合 运行高效 外设支持方便等优势 以 面向客户 面向营销 面向流程 面向体验 为设计理念 构建了统一的客户视图和以客户为中
  • java自动化测试语言高级之MySQL 连接

    java自动化测试语言高级之MySQL 连接 文章目录 java自动化测试语言高级之MySQL 连接 Java MySQL 连接 Java MySQL 连接 本章节我们为大家介绍 Java 如何使用 使用 JDBC 连接 MySQL 数据库
  • TypeError: __init__() got an unexpected keyword argument ‘transport_options‘

    在较新版本的 Elasticsearch Python 客户端中 确实没有名为 transport options 的参数 要设置传输选项 需要使用 transport class 参数来创建自定义传输类 并在传输类中设置选项 以下是一个示
  • Python打包的艺术(一)- 综述

    本文转载至 http blog chinaunix net uid 15174104 id 3863249 html Python打包的艺术是一个专题 我将在这个专题里分享自己对构建 管理和发布Python软件包的理解 这个专题 将涉及几个
  • 初识密码学

    初识密码学 摩斯密码 猪圈密码 键盘密码 普通键盘密码 用键盘换数字 拼音九键 栅栏密码 恺撒密码 维吉尼亚密码 希尔密码 摩斯密码 加密之前先来认识一下摩尔斯电码 点划 图像 二叉树 SOS并不是任何求救英文的缩写 而是因为在摩尔斯电码中
  • 无锁和偏向锁有什么区别?

    无锁和偏向锁是 Java 中的两种轻量级锁实现 它们和重量级锁相比 具有更高的性能和更低的开销 它们之间的区别如下 无锁 CAS 自旋锁 无锁是一种不需要使用锁的同步技术 它的实现依赖于 CAS Compare And Swap 操作 通过
  • ARM:分散加载

    1 GCC编译器下的分散加载 ld文件 SECTIONS ram text flash start LOADADDR ram text ram text ram text start user iic o text ALIGN 4 All
  • AdaBoost算法实例详解

    提升树Boosting Tree算法实例详解 程大海的博客 CSDN博客 从提升树Boosting Tree过度到梯度提升Gradient Boosting 程大海的博客 CSDN博客 GBDT梯度提升之回归算法个人理解 程大海的博客 CS
  • Centos7.6安装docker

    一 环境准备 Docker 支持以下的 64 位 CentOS 版本 CentOS 7 CentOS 8 更高版本 二 安装步骤 1 如果是重装 则需要卸载旧版本 sudo yum remove docker docker client d
  • k8s flannel划分子网方案

    目标 对宿主节点划分子网 同时实现对不同应用划分子网 实现说明 部署k8s时 划分宿主节点ip 对每个节点配置不同net conf json 这样pod调度到宿主节点时 根据net conf json内的network配置分配ip 实现po
  • git基本使用

    1 git init 初始化本地仓库 2 git add 或文件名 暂存 3 git commit m 自己定名字 4 git status 查看 5 git remote add origin https github com xxx 6
  • 强化学习之混合动作空间

    强化学习之混合动作空间 基本介绍 在强化学习的动作空间设定中有连续动作空间 离散动作空间和混合动作空间 在大多数的论文中研究的都是连续动作空间和离散动作空间 而混合动作空间研究的比较少 在游戏ai 自动驾驶等一些领域中有时动作空间可以是混合
  • 安装Elasticsearch

    gt 安装 1 创建基础环境 环境 centos7 9 es版本 7 13 3 按照如下的步骤一步步走 就可以正常完成安装 groupadd es useradd es g es p es123 cd home mkdir p elk es
  • nuxt.js局部引用quill富文本编辑器

    想在nuxt js中使用quill富文本编辑器 按照网上常见的方法 将css js 添加到 nuxt config js 这是全局调用了quill的css js 文件 在每个页面的源码中 都可以看到quill 的css js 这是没有必要的
  • 老板让你做性能优化,第一步你应该做什么?

    前言 项目的性能决定了用户对项目的整体感观度 优秀的性能可以保证项目的流畅与自然给用户愉快的体验感受 当我们开发完成一个项目以后最重要的环节就是要保证项目拥有一个良好的性能 所以开发完成以后需要我们针对项目做好性能优化 那么 要使一个项目拥
  • 大模型杀手级场景到底什么会到来

    大模型大潮之下 熙熙攘攘 皆为利来 皆为利往 所以很多人观望之后发现到现在还没有杀手级落地场景 便有些不耐烦了 觉得可能又是一股泡沫 但究竟是不是泡沫 需要从宏观角度分析下当前大模型的现状 笔者认为这种不耐烦其实来源于两个原因 1 天下事
  • 最适合零基础的爬虫教程,从零开始教你爬取十万表情包。非常简单。

    前言 事情要从几天前说起 我有一个朋友 他在和他喜欢的小姐姐聊天时 聊天的气氛一直非常尬 这时他就想发点表情包来缓和一下气氛 但一看自己的表情包收藏都是这样的 这发过去 基本就直接和小姐姐说拜拜了 然后他就向我求救问我有没有表情包 表情包我