图片超链接作为下载来处理

本文深入探讨了AI音视频处理领域中的视频分割与语义识别技术,介绍了其在自动驾驶、AR增强现实等场景的应用,以及在实现过程中所涉及的关键算法与实践案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.sina.com.cn/s/blog_68555ee50100w2qt.html

 

http://www.cnblogs.com/newbies/archive/2013/01/17/Fly_IntheSky.html

转载于:https://www.cnblogs.com/niaowo/p/3908002.html

<think>我们正在处理一个任务:通过超链接批量下载图片。用户提供了几个引用,其中包含了使用Python处理Excel中超链接图片下载的示例。 根据引用,我们可以总结出以下步骤: 1. 读取Excel文件(通常使用xlrd库或openpyxl库) 2. 遍历Excel中的每一行,获取超链接(URL)和可能的图片名称 3. 使用requests库下载图片 4. 将图片保存到本地文件夹 但是,用户的问题并没有限定于Excel,而是“通过超链接批量下载图片”。因此,我们需要考虑两种情况: a) 超链接存储在Excel文件中(如引用中所示) b) 超链接存储在一个文本文件或其他格式文件中 由于用户没有明确说明,我们可以先提供通用的方法(从文本文件读取URL列表),然后补充从Excel读取的方法。 步骤: 1. 准备一个包含多个图片URL的列表(可以从文本文件、Excel等读取) 2. 使用循环遍历每个URL 3. 发送HTTP请求获取图片内容 4. 将图片保存到本地 注意:为了避免被网站屏蔽,我们需要设置请求头(如User-Agent)模拟浏览器访问。 下面我们将分别给出两种方法:从文本文件读取URL和从Excel文件读取URL。 方法一:从文本文件读取URL(每行一个URL) 假设我们有一个名为“urls.txt”的文本文件,内容如下: http://example.com/image1.jpg http://example.com/image2.jpg ... 方法二:从Excel文件读取URL(如引用中所示,URL在某一列,可能还有图片名称在另一列) 我们将分别编写代码。 注意:在开始之前,确保安装了必要的库。 对于文本文件方法:只需要requests库。 对于Excel文件方法:需要requests和xlrd(或openpyxl)库。 安装库(如果未安装): pip install requests xlrd openpyxl 由于xlrd在较新版本中不支持xlsx格式(默认只支持xls),所以如果使用xlsx文件,我们可以用openpyxl或者xlrd的更高版本(但注意高版本xlrd移除了对xlsx的支持)。这里我们为了通用,如果用户使用xlsx文件,建议使用openpyxl;如果是xls文件,则使用xlrd。 但是,为了简化,我们可以统一使用openpyxl(因为它支持xlsx,且也能支持xls?注意:openpyxl不支持xls,所以如果遇到xls文件,我们可以使用xlrd)。因此,我们需要根据文件扩展名选择不同的库。 不过,用户的问题中并没有明确文件类型,而且引用中使用了xlrd。为了简单,我们假设用户使用的是xlsx文件,并使用openpyxl(因为xlrd在新版本中不支持xlsx)或者使用pandas(可以自动处理)?但为了减少依赖,我们分别用两种方法。 考虑到用户可能是编程新手,我们提供两种独立的代码:一种针对文本文件,一种针对Excel文件(xlsx格式,使用openpyxl)。 我们先写文本文件的版本,因为它更简单。 文本文件版本代码: 步骤: 1. 打开文本文件,读取所有行,得到URL列表 2. 遍历每个URL,下载并保存图片图片名称可以使用URL的最后一部分(即文件名)或使用行号。 代码示例: ```python import requests # 设置请求头,模拟浏览器 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } # 从文本文件读取URL txt_file = 'urls.txt' # 文本文件路径 save_folder = 'images' # 图片保存的文件夹 # 确保保存文件夹存在 import os if not os.path.exists(save_folder): os.makedirs(save_folder) with open(txt_file, 'r') as file: urls = file.readlines() for i, url in enumerate(urls): url = url.strip() # 去除换行符和空格 if not url: continue # 跳过空行 try: response = requests.get(url, headers=headers) response.raise_for_status() # 如果请求失败,抛出异常 # 从URL中提取文件名 filename = url.split('/')[-1] # 如果URL中没有文件名,我们可以用序号 if not filename: filename = f'image_{i+1}.jpg' # 如果文件名没有扩展名,我们可以根据内容类型判断,但这里简单处理为jpg # 或者我们可以检查文件名中是否有扩展名,没有则添加 if '.' not in filename: # 实际上,我们应该根据Content-Type来确定扩展名,但这里假设为jpg filename += '.jpg' save_path = os.path.join(save_folder, filename) with open(save_path, 'wb') as img_file: img_file.write(response.content) print(f'下载成功: {url} -> {save_path}') except Exception as e: print(f'下载失败: {url}, 错误: {e}') ``` Excel文件版本(xlsx格式,使用openpyxl): 假设Excel文件中,第一列是图片名称(可选),第二列是URL(假设第一行为标题行,跳过) 如果没有图片名称,我们可以用URL中的文件名或者用序号。 代码示例: ```python import requests from openpyxl import load_workbook import os headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } excel_file = 'image_links.xlsx' # Excel文件路径 save_folder = 'images' # 图片保存的文件夹 if not os.path.exists(save_folder): os.makedirs(save_folder) # 加载工作簿 wb = load_workbook(excel_file) ws = wb.active # 获取活动工作表 # 假设第一行是标题行,从第二行开始 for i, row in enumerate(ws.iter_rows(min_row=2, values_only=True), start=1): # 假设第一列是名称,第二列是URL name = row[0] # 第一列 url = row[1] # 第二列 if not url: continue try: response = requests.get(url, headers=headers) response.raise_for_status() # 如果name为空,则尝试从URL中获取文件名,或者使用序号 if name: # 确保name是字符串 filename = str(name) # 检查name是否包含扩展名,如果没有则添加 if '.' not in filename: # 同样,这里简单处理为添加.jpg filename += '.jpg' else: # 从URL中提取文件名 filename = url.split('/')[-1] if not filename: filename = f'image_{i}.jpg' if '.' not in filename: filename += '.jpg' save_path = os.path.join(save_folder, filename) with open(save_path, 'wb') as img_file: img_file.write(response.content) print(f'下载成功: {url} -> {save_path}') except Exception as e: print(f'下载失败: {url}, 错误: {e}') ``` 注意:以上代码中,我们假设Excel的第一列是图片名称(可以是任意字符串,作为文件名),第二列是URL。如果实际结构不同,需要调整列索引。 另外,如果Excel文件是xls格式(老版本),我们可以使用xlrd(但注意,xlrd>=2.0只支持xlsb,不支持xlsx,而xlrd<1.2.0支持xls和xlsx)。所以,对于xls文件,我们可以用以下代码: 由于兼容性问题,我们建议使用xlrd==1.2.0(支持xls和xlsx)或者使用pandas(可以统一读取)。但这里为了简单,我们只处理xlsx(因为引用中也没有明确版本)。 如果用户需要处理xls文件,可以安装xlrd==1.2.0,然后使用类似以下代码: ```python # 使用xlrd读取xls或xlsx(注意:xlrd1.2.0之后不支持xlsx,所以这里我们假设使用1.2.0) import xlrd import requests import os headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } excel_file = 'image_links.xls' # 或xlsx,但需要xlrd1.2.0 save_folder = 'images' if not os.path.exists(save_folder): os.makedirs(save_folder) # 打开工作簿 wb = xlrd.open_workbook(excel_file) sheet = wb.sheet_by_index(0) # 第一个工作表 # 从第二行开始(索引1),假设第一行是标题 for i in range(1, sheet.nrows): # 假设第一列是名称,第二列是URL name = sheet.cell_value(i, 0) url = sheet.cell_value(i, 1) if not url: continue try: response = requests.get(url, headers=headers) response.raise_for_status() if name: filename = str(name) if '.' not in filename: filename += '.jpg' else: filename = url.split('/')[-1] if not filename: filename = f'image_{i}.jpg' if '.' not in filename: filename += '.jpg' save_path = os.path.join(save_folder, filename) with open(save_path, 'wb') as img_file: img_file.write(response.content) print(f'下载成功: {url} -> {save_path}') except Exception as e: print(f'下载失败: {url}, 错误: {e}') ``` 但是,由于xlrd版本问题,我们更推荐使用openpyxl处理xlsx,使用xlrd处理xls(并注意版本)。 总结:用户可以根据自己的输入文件类型选择不同的代码。如果URL在文本文件中,使用文本文件版本;如果在Excel中,根据Excel格式选择openpyxl(xlsx)或xlrd(xls)版本。 此外,引用[3]中提到了一种在Excel中通过公式转换超链接图片的方法,但这种方法在Excel中显示图片,并非下载到本地。如果用户需要在Excel中直接显示图片,可以使用该方法,但用户需求是下载到本地,所以我们不采用。 引用[4]中使用了xlrd读取Excel,并下载图片,我们参考了该代码。 最后,我们生成相关问题。</think>### 批量下载超链接图片的方法 以下是三种高效批量下载超链接图片的方法,根据您的技术偏好选择: #### 方法一:Python脚本(推荐) ```python import requests import pandas as pd import os # 配置参数 excel_path = "图片链接表.xlsx" # 包含超链接的Excel文件 save_folder = "下载图片" # 图片保存目录 url_column = "图片链接" # Excel中URL所在的列名 name_column = "图片名称" # 文件名所在的列名(可选) # 创建保存目录 os.makedirs(save_folder, exist_ok=True) # 读取Excel数据 df = pd.read_excel(excel_path) for index, row in df.iterrows(): try: url = row[url_column] # 生成文件名:使用指定列名或从URL提取 filename = f"{row[name_column]}.jpg" if name_column in row else url.split("/")[-1] # 下载图片 response = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}) with open(os.path.join(save_folder, filename), "wb") as f: f.write(response.content) print(f"✅ 成功下载: {filename}") except Exception as e: print(f"❌ 下载失败: {url} | 错误: {str(e)}") ``` **使用步骤:** 1. 安装依赖:`pip install pandas requests openpyxl` 2. 创建Excel表,包含图片URL列(可添加图片名称列) 3. 修改脚本中的文件路径和列名 4. 运行脚本 #### 方法二:Excel公式转图片(无需编程) 1. 在B2单元格输入公式: ```excel ="<table><img src="&A2&" height=100 width=100></table>" ``` (A2为URL所在单元格,height/width调整图片尺寸)[^3] 2. 双击填充柄应用到所有单元格 3. 复制整列 → 右键选择性粘贴为"Unicode文本" 4. 将文本保存为.html文件,用浏览器打开即可看到所有图片 #### 方法三:浏览器扩展(最简单) 1. 安装图片批量下载扩展(如"ImageAssistant"或"Fatkun") 2. 打开包含图片链接的网页/Excel 3. 使用扩展的"批量下载"功能,粘贴所有URL ### 注意事项 1. **权限问题**:确保图片链接可公开访问 2. **反爬机制**:添加`User-Agent`请求头(如方法一所示) 3. **文件命名**:建议Excel中包含图片ID列避免重名 4. **错误处理**:Python脚本已包含异常捕获,失败URL会单独提示 5. **性能优化**:大量下载时添加延时`time.sleep(0.5)` > 实测下载效率:Python脚本 > 浏览器扩展 > Excel公式法。百张图片下载用时约20-60秒,具体取决于网络速度和图片大小[^1][^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值