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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:15:49