【网络安全带你练爬虫-100练】第10练:re的正则匹配、文件夹创建、图片下载

news2024/11/15 11:51:21

目录

一、目标1:正则匹配图片的URL

二、目标2:创建文件夹

三、目标3:保存图片到test文件夹中

 四、网络安全小圈子


一、目标1:正则匹配图片的URL

URL位置

我们可以找到img都在这个标签里面

 

 

请求方法GET

 

提取URL位置

需要掌握的关键字

.*?
//表示匹配任意字符(除换行符)

(.*?)
//表示匹配任意字符(除换行符)0次或多次,尽可能少地匹配,并将这部分内容作为一个分组

目标标签如下:

<div class="thumb">
    <a target="_blank" style="background:url(https://pic.chinaz.com/picmap/thumb/202306271716277907_5.jpg);background-size:cover;background-position:center" rel="noopener noreferrer" href="https://www.chinaz.com/2023/0708/1541405.shtml">
    </a>
</div>

需要提取的内容如下:

(多加了一个\为转义字符)

img_url = <div class="thumb">.*?url\((.*?)).*?</div>


爬取到所有的格式相符的图片内容

res:是一个正则表达式,用于匹配的模式。

img_url:是要进行匹配的字符串。

re.S:是re模块中的一个标志参数,表示将字符串视为单行,即将换行符也视为普通字符

img_url_list = re.findall(res,img_url,re.S)


运行结果:

将目标URL都爬取到了

 


完整代码:

import re
import requests

def get_img():
    url = 'https://www.chinaz.com/'
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0",
    }

    res = requests.get(url,headers=headers,timeout=10).text
    img_url = '<div class="thumb">.*?url\((.*?));.*?</div>'

    img_url_list = re.findall(img_url,res,re.S)
    print(img_url_list)

if __name__ == '__main__':
    get_img()



二、目标2:创建文件夹

判断文件夹是否存在来决定是否创建文件夹,并使用os.makedirs()函数递归创建文件夹。如果文件夹已存在,则不会进行任何操作

('./test'也可以换为参数进行传值)

(os.mkdir()函数是不会递归创建文件夹)

import os

if not os.path.exists('./test'):    
    os.makedirs('./test')



三、目标3:保存图片到test文件夹中

处理数据

首先依次遍历图片的URL,然后除去非必要的字符

使用replace()函数将非必要字符替换为空

    for u in img_url_list:
        img_u = u.replace("(", "").replace(")", "")
        print(img_u)

运行后,文件夹已创建,URL也遍历成功

 

获取图片数据

有图片地址后get就可以请求到

.content返回二进制格式数据

        image = requests.get(url=img_u,headers=headers,timeout=10).content

给文件命名

取url最后的那个为他的名字

也就是https://pic.chinaz.com/picmap/thumb/202306271716277907_5.jpg

取        202306271716277907_5.jpg

以此类推

        img_name = img_u.split('/')[-1]

将图片保存到本地

图片路径

下载图片到本地路径

        img_path =  './test/' + img_name
        with open(img_path,'wb') as f:
            f.write(img_data)
        print(img_name + '下载成功!')

运行结果:

发现还有一个杂数据进入了导致报错

 

然后我果断加了一个if判断语句

        if re.match(r'https?://', u):

 最后下载成功了

 

完整代码:

import re
import requests
import os

def get_img():
    url = 'https://www.chinaz.com/'
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0",
    }
    res = requests.get(url, headers=headers, timeout=10).text
    img_url = r'<div class="thumb">.*?url\((.*?)\);.*?</div>'
    img_url_list = re.findall(img_url, res, re.S)
    for u in img_url_list:
        if re.match(r'https?://', u):
            img_u = u.replace("(", "").replace(")", "")
            img_data = requests.get(url=img_u, headers=headers, timeout=10).content
            img_name = img_u.split('/')[-1]
            img_path = './test/' + img_name
            with open(img_path, 'wb') as f:
                f.write(img_data)
            print(img_name + '下载成功!')
        else:
            continue

if __name__ == '__main__':
    if not os.path.exists('./test'):
        os.makedirs('./test')
    get_img()



 四、网络安全小圈子

README.md · 书半生/网络安全知识体系-实战中心 - 码云 - 开源中国 (gitee.com)https://gitee.com/shubansheng/Treasure_knowledge/blob/master/README.md

GitHub - BLACKxZONE/Treasure_knowledgehttps://github.com/BLACKxZONE/Treasure_knowledge

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

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

相关文章

【算法 -- LeetCode】(12)整数转罗马数字

1、题目 罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M …

【源码】vue2+element+laravel8开发不良事件上报系统源码

系统概述&#xff1a; 医院不良事件报告系统为医院内质量控制、患者安全关注、医疗安全不良事件方面的精细化的管理提供了平台&#xff0c;是等级医院评审的必备内容&#xff0c;评审要求医院直报系统要与卫生部“医疗安全(不良)事件报告系统”建立网络对接。 不良事件报告系统…

微信小程序WebView嵌入别人网页的解决办法

写在前面&#xff0c;小程序必须是热认证的企业小程序&#xff0c;个人小程序不支持WebView组建。 方法一&#xff1a; 在做微信小程序开始时&#xff0c;大家都能遇到&#xff0c;WebView组件使用的URL必须要在小程序的后台设置业务域名&#xff0c;并且在对应域名服务器根目…

hexo #01 安装

本篇主要步骤 1、前置环境2、安装 hexo3、初始化 hexo4、运行 hexo 1、前置环境 参考官网教程&#xff1a;hexo 博客系统安装前提 2、安装 hexo 这里采用官网推荐的第二种方式局部安装 hexo 包。 $ npm install hexo3、初始化 hexo 创建一个空文件夹&#xff0c;用来作为项…

mysql 数据库备份和还原

数据库备份 第一步&#xff1a;先在环境变量Path里面加上mysql bin目录的路径 第二部&#xff1a;执行对应的命令 备份数据库中的表&#xff1a; 命令&#xff1a; mysqldump -u root -p fenku_lianxi customer > d:\temp.sql root是 账号 username fenku_lianxi是数据…

科技资讯|苹果Vision Pro手部追踪和手势相关新专利曝光

近日&#xff0c;美国专利商标局正式授予苹果一项与 Apple Vision Pro 主要功能相关的专利&#xff1a;手部追踪和手指手势。 苹果专利指出&#xff0c;沉浸感的质量取决于几个重要因素。例如&#xff0c;显示器的特性&#xff0c;如图像质量、帧率、像素分辨率、高动态范围 …

MATLAB|考虑自动重合闸与分布式能源的配电网可靠性评估研究

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

MacOS Sonoma 14.0 (23A5286g) Beta3 带 OC 0.9.3 and FirPE 双分区原版黑苹果镜像

苹果今日向 Mac 电脑用户推送了 macOS 14 开发者预览版 Beta3 更新&#xff08;内部版本号&#xff1a;23A5286g&#xff09;&#xff0c;本次更新距离上次发布隔了 14 天。 一、镜像下载&#xff1a; 1.微信公众号&#xff1a;macOS Sonoma 14.0 (23A5286g) Beta3 带 OC 引导…

染色法判定二分图 — DFS深搜 +BFS宽搜

染色法判定二分图 — DFS深搜 题目描述 给定一个 n n n 个点 m m m 条边的无向图&#xff0c;图中可能存在重边和自环。 请你判断这个图是否是二分图。 输入格式 第一行包含两个整数 n n n 和 m m m。 接下来 m m m 行&#xff0c;每行包含两个整数 u u u 和 v v …

C++教程——继承、多态

继承 继承方式 继承中的对象模型 继承中构造和析构顺序 继承中同名成员处理方式 继承中同名静态成员处理方式 多继承语法 菱形继承 虚继承解决资源浪费的问题 底层原理 多态 多态的原理剖析 纯虚函数与抽象类 虚析构与纯虚析构 虚析构

【Linux系统编程】20.程序、进程、CPU和MMU、PCB

目录 程序 进程 CPU和MMU PCB 程序 编译好的二进制文件&#xff0c;存在磁盘上&#xff0c;只占用磁盘资源。 进程 进程是活跃的程序&#xff0c;占用系统资源&#xff0c;在内存中执行。程序运行起来&#xff0c;产生一个进程。 程序类似于剧本&#xff0c;进程类似于一场…

为何OpenAI能领先大厂开发出如ChatGPT的模型

为何OpenAI能领先大厂开发出ChatGPT的大模型&#xff1f; 信仰和环境缺一不可&#xff0c;不是因为OpenAI从0到1创造性的搞出来大模型&#xff0c;而是信仰和环境造就了ChatGPT大模型 在谈论为何中国乃至其他国家的大厂未能开发出如ChatGPT的模型时&#xff0c;我们需要强调&am…

使用electron打包spring-boot+vue项目开发桌面exe端项目一站式全部解决!专栏有解决报错文章

准备工具 前端:node.js 14以下(直接安装 node.js 即可) 后端:jre 1.8(必须1.8) 工具: Bat_To_Exe_ConverterInno_Setup 汉化版(英文版不支持简体中文,打包出来的安装界面是英文的)我以及给大家汇总完毕直接点击进去下载即可 https://pan.baidu.com/s/1XoA0tj3b4Q…

Geoserver静态瓦片服务

愿你出走半生,归来仍是少年&#xff01; 1.静态瓦片服务 此处描述的静态瓦片服务指瓦片本身存储于服务器的磁盘上&#xff0c;常用的服务类型包含了标准TMS服务以及Google的XYZ服务两种类型。 在Geoserver中常用的瓦片服务包含了WMS、WFS、TMS、WTMS等等。在面向数据更新频率不…

【送书福利-第十四期】ChatGPT时代 + PowerBI助力快速创建动态报表

大家好&#xff0c;我是洲洲&#xff0c;欢迎关注&#xff0c;一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我&#xff01; 本文目录 一、前言二、内容介绍三、抽奖方…

Android 前台服务讲解

目录 Android 前台服务和后台服务区别 前台服务&#xff08;Foreground Service&#xff09;&#xff1a; 后台服务&#xff08;Background Service&#xff09;&#xff1a; 总结&#xff1a; 前台服务更新&#xff1a; JobScheduler、WorkManager 区别和使用方式 andro…

Python encode()函数详解,Python编码解码

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 encode 1、常见编码格式2、返回的是Bytes类型3、错误处理方式4、解码 encode() 可…

5道Mysql面试题

1.什么Mysql的事务&#xff1f;事务的四大特性&#xff1f; Mysql中事务的隔离级别分为四大等级&#xff1a;读未提交&#xff08;READ UNCOMMITTED&#xff09;、读提交 &#xff08;READ COMMITTED&#xff09;、可重复读 &#xff08;REPEATABLE READ&#xff09;、串行化 …

TensorBoard 没有数据

版本 TensorBoard 2.13.0 报错&#xff1a; 打开projector_plugin.py 42行 from tensorboard.compat import notf # noqa: F401 修改为&#xff1a; from tensorboard.compat import tensorflow_stub as tf

Petrozavodsk Winter 2023. Day 1 部分题解

前言&#xff1a;整场的题目质量比较高&#xff0c;虽然之前做过一部分题&#xff0c;但还是被薄纱了 Changing the Sequences 大意&#xff1a; 给定两个数组a,b&#xff0c;长度都为n&#xff0c;元素都介于1-m之间 定义一次操作如下&#xff1a; 构造一个1-m的排列p&…