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

Python使用BeautifulSoup爬取键值对转DataFrame写入CSV方法

船舶IMO爬虫数据转存Pandas导出CSV实现方案

核心逻辑:遍历IMO编号时将单条船舶的属性键值对存为字典,所有船舶数据汇总为列表后一次性转换为DataFrame,自动对齐表头后导出CSV文件。

完整实现代码

import pandas as pd
from bs4 import BeautifulSoup
# 按你实际使用的请求库导入,示例以requests为例
import requests

# 初始化存储所有船舶数据的总列表
all_ships_data = []
# 替换为你实际的IMO编号列表
imos = [9636632, ...]

for imo in imos:
    # 保留你原有的请求、页面解析逻辑
    # resp = requests.get(f"你的目标页面地址?imo={imo}", headers=你的请求头参数)
    # soup = BeautifulSoup(resp.text, "html.parser")

    # 注意:原代码此处class参数写法有误,集合要改为字典键值对格式
    keys_div = soup.find_all("div", {"class": "col-4 keytext"})
    values_div = soup.find_all("div", {"class": "col-8 valuetext"})

    # 初始化单条船舶的属性字典
    single_ship = {}
    for key, value in zip(keys_div, values_div):
        # 提取文本并清除首尾空白、换行符
        key_text = key.text.strip()
        value_text = value.text.strip()

        # 处理重复key:避免同名字段被后值覆盖,自动给重复key加数字后缀
        suffix = 1
        original_key = key_text
        while key_text in single_ship:
            key_text = f"{original_key}_{suffix}"
            suffix += 1
        
        single_ship[key_text] = value_text

    # 单条船数据加入总列表
    all_ships_data.append(single_ship)

# 转换为DataFrame,自动将所有出现过的属性作为表头,缺失值自动填充为NaN
ship_df = pd.DataFrame(all_ships_data)

# 导出CSV,utf-8-sig编码兼容Excel直接打开不乱码,index=False去掉默认行号列
ship_df.to_csv("船舶IMO属性数据.csv", encoding="utf-8-sig", index=False)

关键注意点

  • 文本清洗:所有提取的键、值都用.strip()清除首尾的空格、换行、制表符,避免表头带多余空白导致同名字段无法对齐
  • 重复字段处理:你给出的示例输出存在命名重复/同义不同名的字段(比如重复出现的Deadweight、命名差异的Shiptype/ShipType、Year of Build/Built、Gross/GT),代码已经做了重复key自动加后缀的兼容,如果需要合并同义字段,可以在生成单船字典时手动做key映射统一命名
  • 异常兼容:如果爬取数据量较大,建议在单条IMO的请求、解析逻辑外层加try-except捕获异常,单条数据爬取失败时打印对应IMO编号后跳过,避免整个任务中断
  • 结果校验:代码运行后可以执行print(ship_df.head())查看前5行数据,确认表头和数值匹配正确再使用导出的文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:03:27