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
相关产品推荐
相关产品推荐

