爬虫学习(4)每日一笑
代码
import requests
import re
import osif __name__ == "__main__":if not os.path.exists("./haha"):os.makedirs('./haha')url = 'https://mlol.qt.qq.com/go/mlol_news/varcache_article?docid=6321992422382570537&gameid=3&zone=plat&webview=cc'headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'}page_text = requests.get(url=url,headers=headers).text# print(page_text)#聚焦ex = r'<img\s+src="([^"]+)"'img_src_list = re.findall(ex,page_text,re.S)# print(img_src_list)for src in img_src_list:#请求到了图片的二进制数据img_data = requests.get(url=src,headers=headers).content#生成图片名称img_name = src.split('/')[-1]#图片存储路径imgPath = './haha/'+img_namewith open(imgPath,'wb') as fp:fp.write(img_data)print(img_name,'下载成功!')
1.先从目标网站获取相应的图片地址,再遍历这些地址来搜集图像
可以看到图片是在acticle_content下的图片,所有的图片地址都在。
2.使用正则化来表示
由于我不会写,所以将图片地址所在的前端代码交给ChatGPT,让它帮我生成正则化表达式
<div class="article_content"><p>点关注,不迷路</p><p>图片皆源自网络,侵删</p><p>公众号(可投稿):皮城博物馆(或直接搜索zmmryx)</p><p><img src="https://img.tgl.qq.com/cover/20240424/8b114dc092fbcdc12c8847fa578933c4_1713888056.png" style=""><br></p><p>对温馨过敏是吧?</p><p>via.web</p><p><img src="https://img.tgl.qq.com/cover/20240424/84d493872974112b98f9be55d0acd562_1713888068.png" style=""><br></p><p>向日葵:MMP</p><p>via.web</p><p><img src="https://img.tgl.qq.com/cover/20240424/4a36d0b27c5b73e85bdacf4b4e6cc795_1713888077.gif" style=""><br></p><p>领导:你故意的吧?</p><p>via.web</p><p><img src="https://img.tgl.qq.com/cover/20240424/8358ef2cf0c2ff456f02d7c0c482b8c2_1713888089.png" style=""><br></p><p>家传祖训</p><p>via.web</p><p><img src="https://img.tgl.qq.com/cover/20240424/b3071165ab494e702963d094d6f00416_1713888124.png" style=""><br></p><p>为什么不吃早饭!</p><p>via.web</p><p><img src="https://img.tgl.qq.com/cover/20240424/43900f9ba9748bf5f6f5e141125af6d7_1713888140.png" style=""><br></p><p><img src="https://img.tgl.qq.com/cover/20240424/2d47836090160667d79abbe77aa872e7_1713888309.png" style=""><br></p><p>这可太稀奇了</p><p>via.web</p><p><img src="https://img.tgl.qq.com/cover/20240424/fb6531e908eda8ddcf0561aa484c01c0_1713888324.png" style=""><br></p><p>6啊</p><p>via.web</p><p><img src="https://img.tgl.qq.com/cover/20240424/b45ba9f35594400070f1b8d0b510e3e8_1713888333.png" style=""><br></p><p>这个江涛是老板吗?</p><p>via.web</p><p><img src="https://img.tgl.qq.com/cover/20240424/61102b56833ed346ef2aeb172e0b56db_1713888348.png" style=""><br></p><p>老板好实诚</p><p>via.web</p><p><img src="https://img.tgl.qq.com/cover/20240424/72221325a8ab2adc8f11eb91a81e6ae6_1713888358.gif" style=""><br></p><p>太险了吧</p><p>via.web</p><p><img src="https://img.tgl.qq.com/cover/20240424/415fbbf1cf81242b2bd017d0a7809d1f_1713888391.gif" style=""><br></p><p>别说,还挺合适</p><p>via.web</p><p><img src="https://img.tgl.qq.com/cover/20240424/1c9ac96843a469222b990a7be15edce1_1713888401.gif" style=""><br></p><p>宝宝有什么错?他只是在打坏蛋</p><p>via.web</p><p><span>五杀时刻:</span></p><p><img src="https://img.tgl.qq.com/cover/20240424/04060c43ad45ce7346a849f98a8f7953_1713888416.gif" style=""><br></p><p><span>福利:</span></p><p><img src="https://img.tgl.qq.com/cover/20240424/51da936e88fe1d69db725d3d1dbc772c_1713888427.png" style=""><br></p><p>画师: / N_24</p><p>侵删</p><p><img src="https://img.tgl.qq.com/cover/20240424/11df47d4078b63e636f8b8e489abf0ea_1713888559.jpg" style=""><br></p><p>画师:辰叔</p><p>侵删</p><p><br></p><p><br></p><p><br></p><p><span>联盟猜猜猜:</span></p><p><span>上期:</span></p><p><img src="https://img.tgl.qq.com/cover/20240424/21be3edb5eecff7719cd7f89bd956369_1713888650.png" style=""><br></p><p><img src="https://img.tgl.qq.com/cover/20240424/1f039665fe3342d54dd270e4d16dae6e_1713888632.png" style=""><br></p><p><span>本期:</span></p><p><img src="https://img.tgl.qq.com/cover/20240424/cfb00fad69c756931506de6832bb602f_1713888657.png" style=""><br></p><p style="color:#757E7F !important">来自: 江西</p></div>
则正则化表达式为
pattern = r'<img\s+src="([^"]+)"'
当你编写正则表达式时,需要考虑到你想要匹配的文本模式。让我解释一下这个正则表达式:
1.pattern = r'<img\s+src="([^"]+)"':
2.pattern = r'...':这一行代码创建了一个名为 pattern 的字符串,其中 r 前缀告诉Python解释器这是一个“原始”字符串,也就是说,反斜杠不会被转义。这是为了避免在正则表达式中使用反斜杠时出现意外的行为。
3.'<img\s+src="([^"]+)"':这个字符串是我们的正则表达式模式。
4.<img:匹配文本中的 <img 字符串。
5.\s+:匹配一个或多个空白字符(空格、制表符、换行符等)。
6.src=":匹配文本中的 src=" 字符串。
7.([^"]+):这是一个捕获组,匹配任意数量的非双引号字符,并将其捕获为一个组。[^"] 表示不匹配双引号的任何字符,+ 表示匹配一个或多个这样的字符。
8.":匹配一个双引号字符。所以,这个正则表达式的目的是匹配 <img> 标签中的 src 属性值,并将这个值捕获为一个组,从而提取图片的地址。
3.遍历这些图片地址,并下载保存
for src in img_src_list:
#请求到了图片的二进制数据
img_data = requests.get(url=src,headers=headers).content
#生成图像名称
img_name = src.split('/')[-1]
#图片存储路径
imgPath = './haha/'+img_name
with open(imgPath,'wb') as fp:
fp.write(img_data)
print(img_name,'下载成功!')
成功下载图片,但是gif的也只是静态的
相关文章:

爬虫学习(4)每日一笑
代码 import requests import re import osif __name__ "__main__":if not os.path.exists("./haha"):os.makedirs(./haha)url https://mlol.qt.qq.com/go/mlol_news/varcache_article?docid6321992422382570537&gameid3&zoneplat&webview…...
生产环境节点扩容方案
datanode节点扩缩容(1人天) 注意:新增节点需要走商务,节点扩容需要申请新的license 制品包下载 #内网下载(环境检查脚本) wget --user=admin --password=Y!bC2hx0TN@21cal http://10.69.71.180:8082/artifactory/product/qiudongyang/precheck/os-check20221127.tar…...
Spring线程池配置
配置Spring线程池,特别是ThreadPoolTaskExecutor,通常涉及设置一些关键参数以控制线程池的行为和性能。以下是一些基本的配置步骤: 定义配置类 首先,需要创建一个配置类,使用@Configuration注解标记,并启用异步执行功能,使用@EnableAsync注解。 @Configuration @Enab…...
Unity学习笔记---物理引擎
RigidBody 刚体 1,Gravity Scale 重力参数,是一个乘量参数,调整为0则不受重力影响。 2,Sleeping Mode 睡眠模式,分为永不睡眠/开始时睡眠/开始时不睡眠3种。如需要一直碰撞检测可以选择永不睡眠。 BoxCollider 碰撞…...
Vue与Java使用AES加密与解密
CBC模式(通过偏移值进行加密,更具安全性) 一、VUE: 1、安装 npm install crypto-js 2、编写公用js(在common文件夹下创建一个crypto.js) 注意:key最少要有16个字符,iv最少6个字符…...

B/S版+java开发的医院绩效考核系统maven+Visual Studio Code 医院绩效考核管理系统 提升医疗服务质量的关键
B/S版java开发的医院绩效考核系统mavenVisual Studio Code 医院绩效考核管理系统 提升医疗服务质量的关键 医院绩效评价系统的建设,优化医院绩效管理体系,规范化工作目标的设计、沟通、评价与反馈,改进和提供医院管理人员的管理能力和成效&am…...

汇昌联信科技:拼多多电商的运营流程有哪些?
在当今互联网高速发展的时代,电商平台层出不穷,其中拼多多以其独特的团购模式和低价策略迅速崛起,成为众多消费者和商家的新宠。那么,拼多多电商的运营流程究竟包含哪些环节呢?接下来,我们将从商品上架、营销推广、订…...

AI大模型探索之路-训练篇20:大语言模型预训练-常见微调技术对比
系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…...
现代 c++ 一:c++11 ~ c++23 新特性汇总
所谓现代 c,指的是从 c11 开始的 c,从 c11 开始,加入一些比较现代的语言特性和改进了的库实现,使得用 c 开发少了很多心智负担,程序也更加健壮,“看起来像一门新语言”。 从 c11 开始,每 3 年发…...

【c++】全面理解C++多态:虚函数表深度剖析与实践应用
🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,通过本篇文章,来详细理解多态的内容 目录 1.多态的定义及实现1.1多态的构成条件1.2虚函数的重写1.3 C11 override 和 final1.4重载、覆盖(重写)、隐藏…...

分享四种免费获取SSL的方式
SSL证书目前需要部署安装的网站很多,主要还是基于国内目前对证书的需求度在不断的升高,网站多了、服务器多了之后。网络安全问题就成为了大家不得不面对的一个重要的问题了。SSL证书的作用有很多,这里就不一一详述了,本期作品主要…...
2024.5.14晚训题解
非线性结构没懂的同学多去看看课程回放。 A题Overall Winner 题解 很基础的题目,输入字符串,用计数器去统计一下就好了。 因为赢的次数一样的时候优先判断前面的那个人赢,所以说两个人赢的次数相同的时候我们不必 去记录胜者。 #include<…...
jQuery的选择器与自带函数详解
在前端开发中,jQuery是一个广泛使用的JavaScript库,它极大地简化了HTML文档遍历、事件处理、动画以及AJAX交互等操作。本文将通过一个示例页面,详细介绍jQuery的选择器和一些常用的自带函数。 示例代码优化 首先,我们来优化和完…...
Next.js与SSR:构建高性能服务器渲染应用
1. 创建项目 通过create-next-app脚手架创建一个新的Next.js项目: npx create-next-app my-app cd my-app2. 自动SSR 在Next.js中,每个.js或.jsx文件的组件都会被自动处理为SSR页面。例如,创建一个pages/index.js文件: // pag…...

什么是MVC?什么是SpringMVC?什么是三层架构?
文章目录 应用分层什么是MVC?什么是 SpringMVC?三层架构三层架构和MVC的关系 应用分层 在讲解什么是MVC之前,先来理解一下什么是应用分层。 应用分层是一种软件开发设计思想,将应用程序划分成N个层次,每个层次都分别负责自己的…...

基于springboot+vue+Mysql的在线答疑系统
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...

ssl证书免费申请指南
同学们可以私信我加入学习群! 正文开始 前言一、购买证书二、创建证书三、 验证证书等待出现如下页面,说明申请成功:  总结 前言 今天为大…...

Java构造方法详解
在Java方法内部定义一个局部变量时,必须要初始化,否则就会编译失败,如下: 要让上述代码通过编译,只需在使用a之前给a赋一个初始值即可 如果是对象:下面用一个日期类演示 我们没有给年月日赋值,…...

Spring WebFlux:响应式编程
在软件开发领域,随着互联网应用的规模和复杂性不断增加,传统的编程模型逐渐暴露出一些局限性,尤其是在面对高并发、大规模数据流处理等场景时。为了应对这些挑战,响应式编程(Reactive Programming)应运而生…...

uniapp、web网页跨站数据交互及通讯
来来来,说说你的创作灵感!这就跟吃饭睡觉一样,饿了就找吃的,渴了就倒水张口灌。 最近一个多月实在是忙的没再更新日志,好多粉丝私信说之前的创作于他们而言非常有用!受益菲浅,这里非常感谢粉丝…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...