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

Python如何在爬取循环中逐个删除input.txt内已完成爬取的URL行

问题原因
  • 初始执行urllist.read()后文件指针已经移动到文件末尾,后续循环内调用urllist.readlines()只能读取到空内容,判断i != url永远为真,直接清空了整个文件
  • 写入剩余URL后没有执行文件截断操作,若新内容长度小于旧内容,文件末尾会残留多余的旧数据
  • 没有在每次删除URL后重新读取最新的文件内容,逻辑上无法支持逐个删除的需求
修复后完整代码
def scrape(url):
    # 原有爬取逻辑,返回json结果
    return json

while True:
    # 读取当前所有待处理URL
    with open("input.txt", "r") as f:
        urls = f.read().splitlines()
    if not urls:
        # 没有待处理任务直接退出
        break
    # 取第一条URL执行爬取
    current_url = urls[0]
    
    # 原有爬取结果处理逻辑
    data = scrape(current_url)
    with open('output.txt', 'a+') as outfile:
        if data:
            if data['products'] is None:
                print(f"data NOT FOUND: {current_url}")
            else:
                for product in data['products']:
                    print(f"Saving data: {product['data']}")
                    outfile.write(product['data'])
                    outfile.write("\n")
    
    # 处理完成后,将剩余未处理URL覆盖写回input.txt
    with open("input.txt", "w") as f:
        f.write("\n".join(urls[1:]))
逻辑说明
  • 每次循环先读取当前全部待爬URL,取第一条执行爬取,完全规避文件指针偏移导致的读取错误问题
  • 爬取完成后直接将剩余未爬的URL覆盖写入input.txt,天然实现处理一条删一条的效果,就算程序中途崩溃也不会重复爬取已处理的URL
  • 输出文件保持追加写入模式,爬取结果不会丢失

内容的提问来源于stack exchange,提问作者M Usman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 09:57:00