Python入门小案例: 采集全网表情包图片

news2024/9/25 13:18:49

前言

嗨喽,大家好呀~这里是爱看美女的茜茜呐

又到了学Python时刻~


环境使用:

  • Python 3.8

  • Pycharm 2021.2版本


模块使用:

  • import requests >>> pip install requests

    -pip install -i https://pypi.doubanio.com/simple/ requests

  • import re

安装python第三方模块:

  1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

  2. 在pycharm中点击Terminal(终端) 输入安装命令


思路<通用模板>

一. 数据来源分析

  1. 明确自己采集数据, 是来自于哪里

    • 图片标题

    • 图片链接

    通过浏览器自带工具: 开发者工具

    进行抓包分析

    1. 打开开发者工具: 鼠标右键点击检查选择network / F12

    2. 刷新网页: 为了让本网页数据内容重新加载一遍

      找到图片链接:

      —> 分析有没有地方, 把所有图片地址都包含

    3. 通过开发者工具: 搜索功能去搜索查询对应数据包在哪里

由一个数据 —> 分析找到相关所有数据来源地址

二. 代码实现步骤:

基本四大步骤 发送请求, 获取数据, 解析数据, 保存数据

采集一页数据:

  1. 发送请求, 模拟浏览器对于url地址发送请求

  2. 获取数据, 获取服务器返回响应数据

    开发者工具: response <网页源代码>

  3. 解析数据, 提取我们想要的数据内容

    • 图片标题

    • 图片链接

  4. 保存数据, 把图片内容保存到本地文件夹


代码展示

导入模块

# 导入数据请求模块 --> 第三方模块 需要安装 pip install requests  <手机第三方APP 需要自己下载>
import requests
# 导入正则模块 --> 内置模块 不需要安装  <相当于手机自带APP>
import re
# 导入文件操作模块 --> 内置模块 不需要安装
import os

PS:本篇完整源码如有需要的小伙伴可以加下方的群去找管理员免费领取

“”"

  1. 发送请求, 模拟浏览器对于url地址发送请求
    • 导入模块是灰色, 不是报错 <没有使用模块>

    • 模拟浏览器
      如果不伪装模拟: 可能会被识别出来是爬虫程序, 从而得不到数据
      headers 请求头 --> 直接去复制

    • 请求方法选择是根据开发者工具来的 <根据浏览器来的>

    • <Response [200]>
      Response: 响应
      <> : 对象
      200:状态码 表示请求成功

采集多页数据内容: 分析请求url的参数变化规律

“”"

顾头不顾尾, 包含1, 但是不包含251

for page in range(26, 251):
    print(f'=====================正在采集第{page}页的数据内容=====================')

确定请求链接 f 字符串格式化方法, 把page传入到 url 这个字符串中间

伪装模拟 字典数据类型, 构建完整键值对

   源码、解答加企鹅裙:261823976##
    headers = {
        # User-Agent 用户代理, 表示浏览器基本身份信息
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }

发送请求

调用requests模块里面get请求方法, 对于url地址发送请求, 并且携带上headers请求头伪装, 最后用自定义变量名response接收返回数据

    response = requests.get(url=url, headers=headers)

“”"

  1. 获取数据, 获取服务器返回响应数据

    开发者工具: response <网页源代码>

    response --> <Response [200]>

    text --> 文本

    response.text: 获取响应文本数据, 网页源代码

  2. 解析数据, 提取我们想要的数据内容

  • 图片标题

  • 图片链接

正则表达式re

re模块findall方法 找到所有数据

re.findall(‘匹配什么数据’, ‘什么地方’)

“”"

    img_info = re.findall('<img class="ui image lazy" data-original="(.*?)" src=".*?" title="(.*?)" ', response.text)

for循环遍历, 把列表里面元素 一个一个提取出来

    for img_url, img_name in img_info:
        # img_info <列表: 箱子盒子> img_url, img_name <箱子里面东西>
        print(img_url, img_name)

“”"

  1. 保存数据: 发送请求, 获取二进制数据内容

    response.content 获取二进制数据

    保存 音频/视频/图片/特定格式文件<PDF, zip…>

“”"

        img_content = requests.get(url=img_url, headers=headers).content

自动创建文件夹 \ 转义字符串, 把含有特殊含义字符, 转义成除了本身以外不含有其他特殊含义

        filename = 'data\\'

判断是否存在这个文件

        if not os.path.exists(filename):

自动创建文件夹

            os.mkdir(filename)

根据图片自己的后缀

        img = img_url.split('.')[-1]

替换特殊字符

        new_name = re.sub(r'[\/:*?"<>|]', '', img_name)

len() 统计元素个数

        if len(new_name) > 20:
            new_name = new_name[:10]
        """
        OSError: [Errno 22] Invalid argument: 'data\\这盒里吗?.gif'
            含有特殊字符
        """
        with open(filename + new_name + '.' + img, mode='wb') as f:
            # 写入数据
            f.write(img_content)

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,博主要一下你们的三连呀(点赞、评论、收藏),不要钱的还是可以搞一搞的嘛~

不知道评论啥的,即使扣个6666也是对博主的鼓舞吖 💞 感谢 💐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/127471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Revit中:该扶手的坡度可能与梯段及平台楼梯不平行问题

一、Revit中单独绘制楼梯扶手问题 单独绘制扶手的时候总是会出现梯段及平台上的楼梯不平行&#xff0c;这种情况怎么办? 在正常操作下楼梯会制动生成扶手&#xff0c;但有时候还是回碰到单独绘制扶手的时候然后就会出现这样的些问题&#xff0c;如图1、图2所示。 解决方法&…

(Research)深度迁移学习使循环肿瘤细胞的病变追踪成为可能

Tips: 深度迁移学习使循环肿瘤细胞的病变追踪成为可能 &#xff08;Nat Commun&#xff09;&#xff0c;原文链接: https://pubmed.ncbi.nlm.nih.gov/36509761/ 摘要&#xff1a; CTC做为液体活检中最重要的一个目标&#xff0c;如果能够对 CTC 进行溯源那么就能够实现肿瘤的早…

mediasoup create/connect WebRtcTransport 流程分析

一. 前言 在这篇博客中我们介绍了 mediasoup-demo 启动流程与信令交互&#xff0c;关键信令包括 getRouterRtpCapabilites&#xff0c;join, createWebRtcTransport, connectWebRtcTransport, produce&#xff0c;本文将介绍 createWebRtcTransport 和 connectRtcTransport 的流…

为远程MySQL数据库配置固定的公网TCP地址【内网穿透】

在上篇文章中&#xff0c; 我们成功实现了在公网环境下远程连接内网MySQL数据库。但由于使用的免费的cpolar内网穿透&#xff0c;其所生成的公网地址为随机临时地址&#xff0c;24小时内会发生变化&#xff0c;对于需要长期远程访问的用户来讲非常不方便。因此&#xff0c;本篇…

华为云CDN加速服务,让企业用户上网“走高速”

如今CDN技术在互联网项目中越来越被广泛应用&#xff0c;虽然大多数人对于CDN并不熟悉&#xff0c;但其实我们的日常生活中的看新闻、看直播、网上购物等&#xff0c;都在无形之中跟CDN息息相关。 华为云CDN是通过部署广泛的节点服务器&#xff0c;将源站内容分发给靠近用户的智…

【修改】对“C语言实现轰炸代码”进行修改和完善

场景&#xff1a; 使用C语言实现“轰炸”效果&#xff0c;就是多条重复表情或信息的发送&#xff1b;使用场景是在QQ上面。 问题描述 1.不兼容&#xff0c;对于VS2022或者其他VS编译器无法实现效果。 2.代码能正常运行但无法弹出窗口进行发信息。 原因分析&#xff1a; 1.不…

力扣 2032. 至少在两个数组中出现的值

题目 给你三个整数数组 nums1、nums2 和 nums3 &#xff0c;请你构造并返回一个 元素各不相同的 数组&#xff0c;且由 至少 在 两个 数组中出现的所有值组成。数组中的元素可以按 任意 顺序排列。 示例 输入&#xff1a;nums1 [1,1,3,2], nums2 [2,3], nums3 [3] 输出&a…

Day843.CompletableFuture -Java 并发编程实战

CompletableFuture Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于CompletableFuture的内容。 前面不止一次提到&#xff0c;用多线程优化性能&#xff0c;其实不过就是将串行操作变成并行操作。 如果仔细观察&#xff0c;还会发现在串行转换成并行的过程中&#…

堆树和堆排序

一、堆树 1、定义 堆树的定义如下&#xff1a; &#xff08;1&#xff09;堆树是一颗完全二叉树。 &#xff08;2&#xff09;堆树的每一个结点值都大于等于或者小于等于其左右子结点的值。 &#xff08;3&#xff09;堆树中每个结点的子树都是堆树。为什么是大于等于或者小于…

一口气讲透Redis分布式缓存、秒杀 + 思维导图

一、分布式缓存 1、单点Redis的问题 1、数据丢失问题 Redis数据持久化。 2、并发能力问题 大家主从集群&#xff0c;实现读写分离。 3、故障恢复问题 利用Redis哨兵&#xff0c;实现健康检测和自动恢复。 4、存储能力问题 搭建分片集群&#xff0c;利用插槽机制实现动…

【Linux 常用监控指标总结】

1. Linux运维基础采集项 做运维&#xff0c;不怕出问题&#xff0c;怕的是出了问题&#xff0c;抓不到现场&#xff0c;两眼摸黑。所以&#xff0c;依靠强大的监控系统&#xff0c;收集尽可能多的指标&#xff0c;意义重大。但哪些指标才是有意义的呢&#xff0c;本着从实践中…

【JavaScript】定时器详解

文章目录【JavaScript】定时器详解一. 定时器分类二. 定时器的使用三. 案例&#xff1a;实现抽奖效果样式一样式二【JavaScript】定时器详解 一. 定时器分类 延迟定时器 setTimeout(function(){}, 毫秒数)作用&#xff1a;隔一段时间之后执行 间隔定时器 setInterval(functio…

【UE4 第一人称射击游戏】18-添加角色换弹时的动作

上一篇&#xff1a; 【UE4 第一人称射击游戏】17-重写换弹逻辑 本篇效果&#xff1a; 步骤&#xff1a; 1.打开“SWAT_AnimBP”&#xff0c;在动画图表中&#xff0c;添加一个名为“Reloading”的状态 完善过渡规则的连线 双击打开“Reloading”&#xff0c;添加换弹动画 2…

Spring Security 401 问题解决

背景 &#xff1a; 微服务接口调用的时候报错&#xff0c;原来有一个rest服务用的不多&#xff0c;平时用的都是一些基础的服务&#xff0c;然后客户需要我们开放一个外部接口给他们&#xff0c;然后我寻思着就在这里面写接口。然后调用的时候就报如下的错。 后面跟踪源码发现 …

window上完全卸载oracle

Window上彻底卸载oracle 关闭oracle服务-----开始-----&#xff1e;设置-----&#xff1e;控制面板-----&#xff1e;管理工具-----&#xff1e;服务----->停止所有Oracle服务。 卸载软件------开始------所有程序------Oracle - OraDb11g_home1------Oracle 安装产品-----…

传统CV算法——边缘检测

文章目录传统CV算法-边缘检测第一章 概述1. **边缘检测概述**1.1 **认识边缘**1.2 **边缘检测的概念**1.3 **边缘检测的基本方法**1.4 **边缘检测算子的概念**1.5 **常见的边缘检测算子**2. **用梯度算子实现边缘检测的原理**2.1 **认识梯度算子**2.2 **梯度的衡量**2.3 **使用…

3D打印机的调平问题

快打完第五批料了&#xff0c;也算是有一些仅限于PLA以及PLA&#xff0b;耗材心得 3D打印机调平的简易方式有哪些&#xff1f; 在3D打印机中&#xff0c;打印平台作为模型的承载平台&#xff0c;如果有偏差&#xff0c;那么在后期的打印中&#xff0c;必然会导致细节的出现差…

[从零开始]用python制作识图翻译器·一

AlsoEasy-RecognitionTranslator前言需求分析应用场景需求提取需求补充竞品分析QQ识图百度翻译UU翻译器小结功能实现前言 这是我的毕设作品。当时玩了《人狼村之谜》觉得很惊艳&#xff0c;所以想玩一下该社的别的作品&#xff1a;《D.M.L.C.》。但是苦于没有熟肉&#xff0c;自…

vue2中使用VantUI

Vant 是一个轻量、可靠的移动端组件库 目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本&#xff0c;并由社区团队维护 React 版本和支付宝小程序版本。 Vant 2 - Mobile UI Components built on Vue 第一步&#xff1a;安装该组件库 在现有项目中使用 Vant 时&a…

Azure 深入浅出[3]: 如何在MS Visio里面画专业的Azure技术架构图?

1.前言 笔者最近在研究Azure&#xff0c;需要画Azure的技术架构图&#xff1b;画Azure架构图的方法很多&#xff0c;有在线的工具&#xff0c;有基于Azure的PPT模板&#xff0c;同时也有笔者这样选择用最传统的微软的工具&#xff1a;MS Visio来绘图。那么在MS Visio里面如何绘…