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

Python爬虫问题:无法保存所有链接到JSON文件,仅保留最后一条

爬虫仅保存最后一条链接的原因及修复

问题原因

  • 遍历链接的循环中,value_links变量每次都会被当前遍历到的新链接覆盖,循环结束后仅保留最后一个链接的值,没有将所有链接逐一存入字典。
  • all_links_dict在页面循环内部初始化,每爬一页就会清空之前的存储内容;且每次仅向字典中添加一个键值对,最终自然只剩最后一条数据。
  • 写入文件时使用了w(覆盖写入)模式,每次写入都会清空文件原有内容,之前爬取的链接全被覆盖。

修复后的代码

import requests
from bs4 import BeautifulSoup
import json

headers = {
    "Accept": "*/*",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

# 把字典初始化移到外部,避免每次循环清空
all_links_dict = {}
number = 0

for page_number in range(1, 2):
    url = f"https://www.sothebysrealty.com/eng/associates/int/{page_number}-pg"
    req = requests.get(url, headers=headers)
    src = req.text
    soup = BeautifulSoup(src, "lxml")
    name_link = soup.find_all("a", class_="Entities-card__cta btn u-text-uppercase u-color-sir-blue palm--hide")

    for item in name_link:
        number += 1
        value_links = "https://www.sothebysrealty.com" + item.get("href")
        # 每次遍历都把链接加入字典
        all_links_dict[number] = value_links

# 所有数据收集完成后,一次性写入文件
with open("all_links_dict.json", "w", encoding="utf-8-sig") as file:
    json.dump(all_links_dict, file, indent=4, ensure_ascii=False)

关键修改点

  • 将all_links_dict初始化移至页面循环外,保证所有页面的链接都存在同一个字典中。
  • 在链接遍历循环内,直接将每个链接添加到字典,同时更新计数变量number,避免覆盖。
  • 将文件写入操作移至所有循环结束后,一次性写入所有数据,既避免覆盖问题,也提升效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:05:14