猫12分类:使用多线程爬取图片的Python程序
本文目标
对于猫12目标检测部分的数据集,采用网络爬虫来制作数据集。
在网络爬虫中,经常需要下载大量的图片。为了提高下载效率,可以使用多线程来并发地下载图片。本文将介绍如何使用Python编写一个多线程爬虫程序,用于爬取图片并进行下载。
程序讲解
首先,我们需要导入所需的库,包括requests、PIL、lxml、numpy和threading。其中,requests库用于发送HTTP请求,PIL库用于处理图片,lxml库用于解析HTML,numpy库用于处理数组,threading库用于实现多线程。
import time
import requests
from lxml import etree
import numpy as np
import threading
接下来,我们定义了一个函数searchImageurls,用于从指定网站上搜索图片的URL。在这个例子中,我们以https://www.hippopx.com/zh 为例。函数中,我们使用requests库发送HTTP请求,获取网页内容,并使用lxml库解析HTML,提取图片的URL。最后,我们将URL存储在一个数组中,并返回该数组。
def searchImageurls():ImageUrls = []for i in range(1, 6):url = f"https://www.hippopx.com/zh/query?q=cat&page={i}"response = requests.get(url, headers=headers)html = response.content.decode('utf-8')tree = etree.HTML(html)# print(tree)image_url = tree.xpath('//*[@id="mainlist"]/li/figure/a/img/@src')ImageUrls.append(image_url)ImageUrls = np.array(ImageUrls)ImageUrls = ImageUrls.flatten()return ImageUrls
然后,我们定义了一个函数download_image,用于下载图片。在这个函数中,我们使用requests库发送HTTP请求,获取图片的内容,并使用PIL库将内容保存为图片文件。如果下载失败,我们会进行最大重试次数的重试。
def download_image(url, filename):max_retries = 3 # 最大重试次数retries = 0while retries < max_retries:try:response = requests.get(url)with open(filename, 'wb') as f:f.write(response.content)print(f"Downloaded {filename}")break # 下载成功,跳出循环except requests.exceptions.ConnectionError as e:print(f"Connection error: {e}")retries += 1time.sleep(1) # 等待1秒后重试if retries == max_retries:print(f"Failed to download {filename}")
在主函数中,我们首先调用searchImageurls函数获取图片的URL数组。然后,我们创建多个线程,并将每个线程分配一个URL进行下载。最后,我们等待所有线程完成下载。
最后,我们输出下载完成的消息。
if __name__ == '__main__':ImageUrls = searchImageurls()threads = []print("开始下载")for i, url in enumerate(ImageUrls):filename = f'./images/cat{i + 1}.jpg'thread = threading.Thread(target=download_image, args=(url, filename))thread.start()threads.append(thread)for thread in threads:thread.join()print("全部下载完毕")


注:Connection error: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) -- 这是由于错误的url导致的
完整代码
import time
import requests
from lxml import etree
import numpy as np
import threading# 爬取的图片网站 https://www.hippopx.com/zh
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0"}def searchImageurls():ImageUrls = []for i in range(1, 6):url = f"https://www.hippopx.com/zh/query?q=cat&page={i}"response = requests.get(url, headers=headers)html = response.content.decode('utf-8')tree = etree.HTML(html)# print(tree)image_url = tree.xpath('//*[@id="mainlist"]/li/figure/a/img/@src')ImageUrls.append(image_url)ImageUrls = np.array(ImageUrls)ImageUrls = ImageUrls.flatten()return ImageUrls# 图片下载
def download_image(url, filename):max_retries = 3 # 最大重试次数retries = 0while retries < max_retries:try:response = requests.get(url)with open(filename, 'wb') as f:f.write(response.content)print(f"Downloaded {filename}")break # 下载成功,跳出循环except requests.exceptions.ConnectionError as e:print(f"Connection error: {e}")retries += 1time.sleep(1) # 等待1秒后重试if retries == max_retries:print(f"Failed to download {filename}")if __name__ == '__main__':ImageUrls = searchImageurls()threads = []print("开始下载")for i, url in enumerate(ImageUrls):filename = f'./images/cat{i + 1}.jpg'thread = threading.Thread(target=download_image, args=(url, filename))thread.start()threads.append(thread)for thread in threads:thread.join()print("全部下载完毕")
相关文章:
猫12分类:使用多线程爬取图片的Python程序
本文目标 对于猫12目标检测部分的数据集,采用网络爬虫来制作数据集。 在网络爬虫中,经常需要下载大量的图片。为了提高下载效率,可以使用多线程来并发地下载图片。本文将介绍如何使用Python编写一个多线程爬虫程序,用于爬取图片…...
《深度学习500问》外链笔记
1.这个是什么意思...
机器学习技术栈—— 概率学基础
机器学习技术栈—— 概率学基础 先验概率、后验概率、似然概率总体标准差和样本标准差 先验概率、后验概率、似然概率 首先 p ( w ∣ X ) p ( X ∣ w ) ∗ p ( w ) p ( X ) p(w|X) \frac{ p(X|w)*p(w)}{p(X)} p(w∣X)p(X)p(X∣w)∗p(w) 也就有 p ( w ∣ X ) ∝ p ( X ∣ …...
使用Redis实现分布式锁
Hi, I’m Shendi 使用Redis实现分布式锁 需求场景 需要使用到分布式锁的场景非常多,例如抢单等并发场景,这里举一个例子。 有一个商品,限量出售100个,一个用户下单,数量就减少一个,当剩下最后一个时&…...
linux 服务器进程、端口查找,nginx 配置日志查找,lsof 命令详解
一 、根据端口号 查看文件的部署位置 1.1 使用查看端口号对应的进程信息 方式一 : 使用netstat命令 netstat -tuln | grep 端口号-t:显示TCP连接 -u:显示UDP连接 -l:仅显示监听状态的连接 -n:以数字形式显示端口…...
汽车标定技术--A2L格式分析
目录 1.A2L由来 2.A2L格式 2.1 PROJECT 2.2 MODULE中包含的内容 3. INCA和CANape兼容吗? 最近有朋友用Vector ASAP2Editor编译的A2L文件在INCA7.4中无法识别,我记得以前做的时候是可以识别的,难不成最近有什么变动吗?出于好…...
Linux操作系统使用及C高级编程-D9D10Linux 服务搭建与使用
TFTP服务器 TFTP(Trivial File Transfer Protocol)即简单文件传输协议,是TCP/IP协议中一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69 1、使用客户服务器方式和使用UDP数据…...
git下载安装配置及Git在Gitee上拉取和上传代码教程
一、Git下载安装和配置 Git是一个分布式版本控制系统,用于跟踪文件的变化并协作开发。以下是安装和配置Git的简单步骤: 安装Git 下载Git安装程序:Git下载地址。 运行安装程序,按照提示进行安装。 在安装过程中,选择…...
ospf路由选路及路由汇总
一、知识补充 1、ABR和ASBR 1.1 ABR ABR指的是边界路由,通常位于两个或多个区域之间,用于在不同的OSPF区域之间传递信息。当一个路由器同时连接到两个或多个区域时,它就成为了ABR,它需要维护每个区域的拓扑信息和路由表&#x…...
Oracle 11g 多数据库环境下的TDE设置
19c的TDE wallet的设置是在数据库中设置的,也就是粒度为数据库,因此不会有冲突。 而11g的设置是在sqlnet.ora中,因此有可能产生冲突。 这里先将一个重要概念,按照文档的说法,wallet是不能被数据库共享的。 If there …...
vue3使用pinia实现数据缓存
文章目录 前言一、pinia是什么?二、安装pinia三、注册pinia四、使用pinia定义数据及方法使用 优化如有启发,可点赞收藏哟~ 前言 vue2以前一直使用vuex实现状态管理 vue3之后推出了pinia… 一、pinia是什么? 直观、类型安全、轻便灵活的Vue …...
【CSS】min 和 max 函数(设置最大最小值)
文章目录 min() 函数:允许你从逗号分隔符表达式中选择一个最小值作为 CSS 的属性值 width: min(1vw, 4em, 80px);max() 函数:让你可以从一个逗号分隔的表达式列表中选择最大(正方向)的值作为属性的值 width: max(10vw, 4em, 80p…...
ip地址跟wifi有关系吗
你可能已经听说过IP地址和Wi-Fi这两个词,但你有没有想过它们之间是否有关系呢?在这篇文章中,我们将深入探讨IP地址与Wi-Fi之间的密切联系。从基本概念到应用实例,虎观代理小二二将为您解答这个问题。 首先,让我们来了…...
[算法学习笔记](超全)概率与期望
引子 先来讲个故事 话说在神奇的OI大陆上,有一只paper mouse 有一天,它去商场购物,正好是11.11,商店有活动 它很荣幸被选上给1832抽奖 在抽奖箱里,有3个篮蓝球,12个红球 paper mouse能抽3次 蒟蒻的p…...
SpringCloud相关
文章目录 Gateway动态路由灰度策略 FeignRibbon SpringCloud五大组件分别对应(1)服务注册与发现(2)客服端负载均衡(3)断路器(4)服务网关(5)分布式配置 Gatewa…...
在 Linux 和 Windows 系统下查看 CUDA 和 cuDNN 版本的方法,包括使用 nvcc 命令
一直都比较头疼cuda与cudnn版本查看问题,两个系统不一样也不好查看,命令不通用 Linux 查看 CUDA 版本 方法一: nvcc --version或 nvcc -V如果 nvcc 没有安装,那么用方法二。 方法二: 去安装目录下查看ÿ…...
idea项目中java类名出现带 j 小红点,如何解决?
目录 一、问题描述 二、问题解决方案 1、寻找异常问题 2、解决方案 2.1常规操作方法 2.2 快速操作方法 一、问题描述 一打开idea的java项目,发现所有的文件边上都有带J的大红点 虽然,在 git bash 中进行编译时无异常。 但是视觉上给人的感受就是…...
生产环境_移动目标轨迹压缩应用和算法处理-Douglas-Peucker轨迹压缩算法
场景: 我目前设计到的场景是:即在地图应用中,对GPS轨迹数据进行压缩,减少数据传输和存储开销,因为轨迹点太频繁了,占用空间太大,运行节点太慢了,经过小组讨论需要上这个算法&#x…...
HINSTANCE是什么?
HINSTANCE 就是 HMODULE:...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
