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

多同结构网站爬取后仅最后URL内容写入JSON问题求助

嘿,我来帮你搞定这个问题!你遇到的情况太典型了——循环处理多个URL时,结果没被正确收集,最后写入文件的时候自然只剩最后一个啦。咱们先唠唠常见的坑,再给你改好代码。

常见问题根源

  • 结果没累加:如果每次循环都重新定义空的字典/列表,之前爬的内容直接被覆盖,最后自然只剩最后一个URL的数据。
  • 文件写入模式错了:要是每次循环都用open('output.json', 'w'),w模式会清空文件重写,前面的内容全被冲掉,最终只留最后一次的结果。

修正后的代码

from urllib.request import urlopen
from bs4 import BeautifulSoup as soup
import json

# 补全后的URL列表示例
urls = [
    'https://scholarworks.gvsu.edu/books/',
    'https://pdxscholar.library.pdx.edu/pdxopen/',
    'https://oer.galileo.usg.edu/books/'
]

# 初始化一个空列表,专门用来收集所有URL的爬取结果
all_results = []

for url in urls:
    try:
        # 打开URL并解析页面结构
        uClient = urlopen(url)
        page_html = uClient.read()
        uClient.close()
        page_soup = soup(page_html, "html.parser")
        
        # 这里替换成你实际的内容提取逻辑,根据目标网站HTML结构调整
        # 示例:提取站点标题和书籍标题列表
        site_title = page_soup.title.text.strip()
        books = [book.text.strip() for book in page_soup.select('.book-title')]
        
        # 把当前URL的结果整理成字典,加入总结果列表
        current_result = {
            'url': url,
            'site_title': site_title,
            'books': books
        }
        all_results.append(current_result)
        
        # 终端打印当前结果,方便查看进度
        print(f"已完成爬取:{url}")
        print(current_result)
        print("---")
        
    except Exception as e:
        # 捕获异常,避免单个URL出错导致整个程序中断
        print(f"爬取{url}时出错:{str(e)}")
        continue

# 所有URL爬取完成后,一次性写入JSON文件
with open('output.json', 'w', encoding='utf-8') as f:
    json.dump(all_results, f, indent=4, ensure_ascii=False)

print("所有结果已成功写入output.json!")

关键修改说明

  1. 统一收集结果:用all_results = []初始化一个总列表,每次爬完一个URL就把结果字典append进去,这样所有数据都会被保留下来。
  2. 一次性写入文件:把文件写入操作放在循环外面,用w模式一次性写入整个列表,彻底避免多次写入覆盖内容的问题。如果URL数量极多怕中途崩溃,也可以改成边爬边追加,但需要额外处理JSON格式(直接追加字典会导致格式错误),所以一次性写入更稳妥。
  3. 异常处理:加了try-except块,就算某个URL爬取失败,程序也能继续处理剩下的链接,还能打印错误信息方便排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:21:50