Python For循环异常:仅能保存最后一个迭代URL对应的图片链接
问题原因及解决方案
你的代码只保存最后一个产品图片URL,核心问题是**readlines()读取的URL包含换行符**。readlines()会把文本文件中每行末尾的\n也读进列表元素里,导致requests.get(links)请求的是带换行的无效URL,大部分请求失败;只有最后一行可能没有换行符,所以只有它的结果被写入。
修复步骤
- 对读取的每个URL调用
strip(),去除首尾的换行、空格等空白字符 - 用
with语句管理文件,自动处理文件关闭和缓冲区刷新,避免写入不完整的问题
修复后的代码
import requests from bs4 import BeautifulSoup # 读取URL列表并处理换行符、过滤空行 with open('urls_list.txt', 'r') as f: urls_list = [url.strip() for url in f.readlines() if url.strip()] miniurl = 'http://www.jinliang.hk' # 用with语句写入文件,自动处理关闭和刷新 with open("img.txt", "a") as f: for link in urls_list: print(link) try: # 发送请求,增加异常处理避免单个URL失败中断程序 grab = requests.get(link) grab.raise_for_status() # 抛出HTTP请求异常 except requests.exceptions.RequestException as e: print(f"请求URL失败: {link}, 错误: {e}") continue soup = BeautifulSoup(grab.text, 'html.parser') for item in soup.find_all(attrs={'class':'detail_bottom'}): for span in item.find_all("span"): data = span.get('data-img') if data: # 避免data为None导致拼接错误 product_link = miniurl + data print(product_link) f.write(f"{product_link}\t") f.write("\n") # 每个产品的图片URL换行分隔,更清晰
额外优化点
- 增加异常处理,单个URL请求失败不会终止整个程序
- 过滤空行,避免处理无效的空URL
- 给每个产品的图片URL添加换行,让输出文件更易读
- 增加
data非空判断,避免拼接None导致的错误
内容的提问来源于stack exchange,提问作者Apoorva G
相关产品推荐
相关产品推荐

