Python多链接JSON数据提取异常求助及CSV导出咨询
问题分析与解决方案
你遇到的核心问题是缩进错误——原代码里的for n in a_list:循环仅定义了kurl,但后续的请求、解析逻辑都在循环外部,导致循环结束后只会处理最后一个ID对应的链接。接下来我帮你修正代码,同时实现导出CSV的功能。
修正后的完整代码
import json import requests from bs4 import BeautifulSoup import csv a_list = [234147,234548,232439,234599,226672,234117,222388] a_url = 'https://jobs.mycareerportal/careers-home/jobs' all_job_data = [] # 存储所有职位的完整数据 for n in a_list: kurl = '{}/{}'.format(a_url, n) print(f"正在处理链接: {kurl}") # 可选:打印处理进度 # 发送请求并解析页面 response = requests.get(kurl) soup = BeautifulSoup(response.content, "html.parser") # 提取JSON数据 script_tags = soup.find_all("script", type="application/ld+json") for script in script_tags: try: data = json.loads(script.string) # 整理需要的字段(可根据实际需求调整) job_info = { "url": data.get("url", ""), "address_locality": data.get("jobLocation", {}).get("address", {}).get("addressLocality", ""), "address_region": data.get("jobLocation", {}).get("address", {}).get("addressRegion", ""), "street_address": data.get("jobLocation", {}).get("address", {}).get("streetAddress", ""), "postal_code": data.get("jobLocation", {}).get("address", {}).get("postalCode", ""), "address_country": data.get("jobLocation", {}).get("address", {}).get("addressCountry", "") } all_job_data.append(job_info) except json.JSONDecodeError: print(f"无法解析{ kurl }的JSON数据") except KeyError: print(f"{ kurl }的JSON数据缺少预期字段") # 导出为CSV文件 csv_filename = "job_details.csv" with open(csv_filename, "w", newline="", encoding="utf-8") as csvfile: # 定义CSV表头 fieldnames = ["url", "address_locality", "address_region", "street_address", "postal_code", "address_country"] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() writer.writerows(all_job_data) print(f"所有数据已导出到{ csv_filename }")
关键修改点说明
- 修复缩进问题:将请求、解析、数据提取的代码全部放入
for n in a_list:循环内部,确保每个ID对应的链接都被处理 - 全局数据收集:用
all_job_data列表存储每个职位的信息,避免仅保留最后一条数据 - 添加错误处理:通过
try-except捕获JSON解析失败或字段缺失的异常,防止程序中途崩溃 - CSV导出功能:使用Python内置的
csv模块,将结构化的数据写入CSV文件,方便后续查看或进一步分析
运行效果
执行代码后,你会看到每个链接的处理进度提示,最终会在代码目录下生成job_details.csv文件,里面包含所有职位的URL和地址信息。
内容的提问来源于stack exchange,提问作者Kristy Green
相关产品推荐
相关产品推荐

