Python脚本仅写入最后一条URL检测结果,如何输出全部内容?
解决URL检测结果仅保留最后一条的问题
你的问题根源很明确:每次处理一个URL时,你都用写入模式("w")打开output.csv,这个模式会清空文件里的所有已有内容,然后写入当前行,所以最终文件里只会剩下最后一次循环的结果。
另外还有个隐藏的小问题:原代码里的s = 'Quantity' or 'Stock'逻辑不对,Python里or运算符会返回第一个为真的表达式,所以s实际只会是'Quantity',永远不会检查'Stock',这个也得一起修正。
下面是修改后的完整脚本,同时优化了CSV格式(把URL和库存状态分成独立列),还增加了异常处理避免脚本崩溃:
import re import requests import csv # 同时打开输入和输出文件,用csv模块处理更规范 with open("input.csv") as input_file, open("output.csv", "w", newline="") as output_file: csv_reader = csv.reader(input_file) csv_writer = csv.writer(output_file) # 可选:写入表头,让输出CSV更易读 csv_writer.writerow(["URL", "Stock Status"]) for row in csv_reader: url = row[0] print(f"正在检测: {url}") try: # 发送请求,同时捕获请求错误 response = requests.get(url) response.raise_for_status() # 触发HTTP错误(比如404、500) # 同时检查"Quantity"和"Stock"关键词 if re.search(r'Quantity|Stock', response.text): stock_status = "In Stock" else: stock_status = "OUT OF STOCK" print(f"检测结果: {stock_status}") # 写入一行:URL + 库存状态 csv_writer.writerow([url, stock_status]) except requests.exceptions.RequestException as e: # 处理网络错误、无效URL等异常情况 error_msg = f"检测失败: {str(e)}" print(f"{url} {error_msg}") csv_writer.writerow([url, error_msg])
关键修改点说明:
- 调整文件打开时机:把
output.csv的打开操作移到循环外面,整个脚本只打开一次文件,用写入模式("w")初始化文件,后续通过csv_writer追加内容,不会覆盖之前的结果。 - 使用
csv.writer规范输出:替代原脚本直接拼接字符串写入的方式,输出的CSV是标准的多列格式,用Excel或其他工具打开时,URL和状态会自动分成两个单元格。 - 修复正则匹配逻辑:用
r'Quantity|Stock'同时匹配两个关键词,解决原代码只检查"Quantity"的问题。 - 增加异常处理:捕获请求过程中的网络错误、HTTP错误等,避免脚本中途崩溃,同时把错误状态写入输出文件。
如果你坚持要保持原脚本里的“URL+状态拼接成一个字符串”的格式,也可以把输出文件改成追加模式("a"),但这种方式不如标准CSV格式实用,示例如下:
import re import requests import csv with open("input.csv") as f: # 先清空输出文件(可选,避免多次运行时追加旧内容) with open("output.csv", "w") as output_f: pass # 用追加模式写入每一条结果 for row in csv.reader(f): url = row[0] r = requests.get(url) # 修复正则匹配逻辑 if re.search(r'Quantity|Stock', r.text): inis = "In Stock" else: inis = "OUT OF STOCK" result_line = f"{url} {inis}" print(result_line) with open("output.csv", "a") as output_f: output_f.write(result_line + "\n")
不过还是更推荐第一种用csv.writer的方案,格式更规范,后续处理更方便。
内容的提问来源于stack exchange,提问作者t0m3k
相关产品推荐
相关产品推荐

