You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:41:11