当前位置: 首页 > news >正文

猫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目标检测部分的数据集&#xff0c;采用网络爬虫来制作数据集。 在网络爬虫中&#xff0c;经常需要下载大量的图片。为了提高下载效率&#xff0c;可以使用多线程来并发地下载图片。本文将介绍如何使用Python编写一个多线程爬虫程序&#xff0c;用于爬取图片…...

《深度学习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实现分布式锁 需求场景 需要使用到分布式锁的场景非常多&#xff0c;例如抢单等并发场景&#xff0c;这里举一个例子。 有一个商品&#xff0c;限量出售100个&#xff0c;一个用户下单&#xff0c;数量就减少一个&#xff0c;当剩下最后一个时&…...

linux 服务器进程、端口查找,nginx 配置日志查找,lsof 命令详解

一 、根据端口号 查看文件的部署位置 1.1 使用查看端口号对应的进程信息 方式一 &#xff1a; 使用netstat命令 netstat -tuln | grep 端口号-t&#xff1a;显示TCP连接 -u&#xff1a;显示UDP连接 -l&#xff1a;仅显示监听状态的连接 -n&#xff1a;以数字形式显示端口…...

汽车标定技术--A2L格式分析

目录 1.A2L由来 2.A2L格式 2.1 PROJECT 2.2 MODULE中包含的内容 3. INCA和CANape兼容吗&#xff1f; 最近有朋友用Vector ASAP2Editor编译的A2L文件在INCA7.4中无法识别&#xff0c;我记得以前做的时候是可以识别的&#xff0c;难不成最近有什么变动吗&#xff1f;出于好…...

Linux操作系统使用及C高级编程-D9D10Linux 服务搭建与使用

TFTP服务器 TFTP&#xff08;Trivial File Transfer Protocol&#xff09;即简单文件传输协议&#xff0c;是TCP/IP协议中一个用来在客户机与服务器之间进行简单文件传输的协议&#xff0c;提供不复杂、开销不大的文件传输服务。端口号为69 1、使用客户服务器方式和使用UDP数据…...

git下载安装配置及Git在Gitee上拉取和上传代码教程

一、Git下载安装和配置 Git是一个分布式版本控制系统&#xff0c;用于跟踪文件的变化并协作开发。以下是安装和配置Git的简单步骤&#xff1a; 安装Git 下载Git安装程序&#xff1a;Git下载地址。 运行安装程序&#xff0c;按照提示进行安装。 在安装过程中&#xff0c;选择…...

ospf路由选路及路由汇总

一、知识补充 1、ABR和ASBR 1.1 ABR ABR指的是边界路由&#xff0c;通常位于两个或多个区域之间&#xff0c;用于在不同的OSPF区域之间传递信息。当一个路由器同时连接到两个或多个区域时&#xff0c;它就成为了ABR&#xff0c;它需要维护每个区域的拓扑信息和路由表&#x…...

Oracle 11g 多数据库环境下的TDE设置

19c的TDE wallet的设置是在数据库中设置的&#xff0c;也就是粒度为数据库&#xff0c;因此不会有冲突。 而11g的设置是在sqlnet.ora中&#xff0c;因此有可能产生冲突。 这里先将一个重要概念&#xff0c;按照文档的说法&#xff0c;wallet是不能被数据库共享的。 If there …...

vue3使用pinia实现数据缓存

文章目录 前言一、pinia是什么&#xff1f;二、安装pinia三、注册pinia四、使用pinia定义数据及方法使用 优化如有启发&#xff0c;可点赞收藏哟~ 前言 vue2以前一直使用vuex实现状态管理 vue3之后推出了pinia… 一、pinia是什么&#xff1f; 直观、类型安全、轻便灵活的Vue …...

【CSS】min 和 max 函数(设置最大最小值)

文章目录 min() 函数&#xff1a;允许你从逗号分隔符表达式中选择一个最小值作为 CSS 的属性值 width: min(1vw, 4em, 80px);max() 函数&#xff1a;让你可以从一个逗号分隔的表达式列表中选择最大&#xff08;正方向&#xff09;的值作为属性的值 width: max(10vw, 4em, 80p…...

ip地址跟wifi有关系吗

​你可能已经听说过IP地址和Wi-Fi这两个词&#xff0c;但你有没有想过它们之间是否有关系呢&#xff1f;在这篇文章中&#xff0c;我们将深入探讨IP地址与Wi-Fi之间的密切联系。从基本概念到应用实例&#xff0c;虎观代理小二二将为您解答这个问题。 首先&#xff0c;让我们来了…...

[算法学习笔记](超全)概率与期望

引子 先来讲个故事 话说在神奇的OI大陆上&#xff0c;有一只paper mouse 有一天&#xff0c;它去商场购物&#xff0c;正好是11.11&#xff0c;商店有活动 它很荣幸被选上给1832抽奖 在抽奖箱里&#xff0c;有3个篮蓝球&#xff0c;12个红球 paper mouse能抽3次 蒟蒻的p…...

SpringCloud相关

文章目录 Gateway动态路由灰度策略 FeignRibbon SpringCloud五大组件分别对应&#xff08;1&#xff09;服务注册与发现&#xff08;2&#xff09;客服端负载均衡&#xff08;3&#xff09;断路器&#xff08;4&#xff09;服务网关&#xff08;5&#xff09;分布式配置 Gatewa…...

在 Linux 和 Windows 系统下查看 CUDA 和 cuDNN 版本的方法,包括使用 nvcc 命令

一直都比较头疼cuda与cudnn版本查看问题&#xff0c;两个系统不一样也不好查看&#xff0c;命令不通用 Linux 查看 CUDA 版本 方法一&#xff1a; nvcc --version或 nvcc -V如果 nvcc 没有安装&#xff0c;那么用方法二。 方法二&#xff1a; 去安装目录下查看&#xff…...

4.10每日一题(二元函数极值相关重要性质,反复学习)

...

idea项目中java类名出现带 j 小红点,如何解决?

目录 一、问题描述 二、问题解决方案 1、寻找异常问题 2、解决方案 2.1常规操作方法 2.2 快速操作方法 一、问题描述 一打开idea的java项目&#xff0c;发现所有的文件边上都有带J的大红点 虽然&#xff0c;在 git bash 中进行编译时无异常。 但是视觉上给人的感受就是…...

生产环境_移动目标轨迹压缩应用和算法处理-Douglas-Peucker轨迹压缩算法

场景&#xff1a; 我目前设计到的场景是&#xff1a;即在地图应用中&#xff0c;对GPS轨迹数据进行压缩&#xff0c;减少数据传输和存储开销&#xff0c;因为轨迹点太频繁了&#xff0c;占用空间太大&#xff0c;运行节点太慢了&#xff0c;经过小组讨论需要上这个算法&#x…...

HINSTANCE是什么?

HINSTANCE 就是 HMODULE&#xff1a;...

告别手动拷贝DLL!用CMake+Qt 5.12管理Qgis 3.10依赖,实现跨平台环境一键部署

告别手动拷贝DLL&#xff01;用CMakeQt 5.12管理Qgis 3.10依赖&#xff0c;实现跨平台环境一键部署 在跨平台GIS应用开发中&#xff0c;手动管理Qt和Qgis的依赖项堪称开发者的噩梦。想象一下&#xff1a;每次新建项目都要复制数百MB的DLL文件&#xff0c;不同环境下的路径差异导…...

从Python列表到Numpy数组:手把手教你数据科学入门必备的ndarray操作避坑指南

从Python列表到Numpy数组&#xff1a;数据科学必备的ndarray操作避坑指南 当你第一次尝试用Python处理数值计算时&#xff0c;可能会惊讶地发现&#xff1a;用纯Python列表做矩阵乘法比Excel还慢。这不是你的代码有问题&#xff0c;而是你还没遇到Numpy的ndarray——这个数据科…...

深度解析B站视频下载器:技术架构与实战应用指南

深度解析B站视频下载器&#xff1a;技术架构与实战应用指南 【免费下载链接】bilibili-downloader B站视频下载&#xff0c;支持下载大会员清晰度4K&#xff0c;持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 在数字内容消费日益增长的…...

TQVaultAE终极指南:如何彻底解决《泰坦之旅》仓库管理难题

TQVaultAE终极指南&#xff1a;如何彻底解决《泰坦之旅》仓库管理难题 【免费下载链接】TQVaultAE Extra bank space for Titan Quest Anniversary Edition 项目地址: https://gitcode.com/gh_mirrors/tq/TQVaultAE 你是否曾在《泰坦之旅》中为仓库空间不足而烦恼&#…...

从告警风暴到自治闭环,AI原生运维到底卡在哪?SITS 2026专家团亲授4个致命断点与破局清单

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;从告警风暴到自治闭环&#xff0c;AI原生运维到底卡在哪&#xff1f;SITS 2026专家团亲授4个致命断点与破局清单 在SITS 2026现场&#xff0c;来自阿里云、字节跳动与工商银行的AI运维联合工作组披露了…...

5分钟掌握MouseClick:免费开源鼠标连点器终极指南

5分钟掌握MouseClick&#xff1a;免费开源鼠标连点器终极指南 【免费下载链接】MouseClick &#x1f5b1;️ MouseClick &#x1f5b1;️ 是一款功能强大的鼠标连点器和管理工具&#xff0c;采用 QT Widget 开发 &#xff0c;具备跨平台兼容性 。软件界面美观 &#xff0c;操作…...

如何快速从图表图片中提取数据:WebPlotDigitizer完整指南

如何快速从图表图片中提取数据&#xff1a;WebPlotDigitizer完整指南 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 在科研和数据分析…...

基于OpenClaw的微信个人号本地集成开发指南

1. 项目概述与核心价值如果你正在寻找一个能让你在本地开发环境中&#xff0c;像调用一个普通API一样&#xff0c;轻松、安全地集成微信个人号能力&#xff08;比如收发消息、管理联系人、获取朋友圈信息&#xff09;的方案&#xff0c;那么Wscats/wechat-claw这个项目绝对值得…...

Unity实战:用Mesh和Color.Lerp手搓一个可交互的3D热力图(附完整C#源码)

Unity实战&#xff1a;从零构建可交互3D热力图的底层逻辑与工程化实现 在数据可视化领域&#xff0c;热力图一直是最直观的呈现方式之一。当我们需要在3D场景中展示地形温度分布、玩家活动热区或资源聚集程度时&#xff0c;传统的2D热力图往往难以满足空间感知需求。本文将带您…...

BooruDatasetTagManager:AI训练数据标注的终极指南,10倍效率提升的秘密

BooruDatasetTagManager&#xff1a;AI训练数据标注的终极指南&#xff0c;10倍效率提升的秘密 【免费下载链接】BooruDatasetTagManager 项目地址: https://gitcode.com/gh_mirrors/bo/BooruDatasetTagManager 你是否曾为AI模型训练准备数据集而感到头疼&#xff1f;面…...