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

使用Python爬取.dat翼型坐标数据时解析结果异常如何解决

问题根源

你请求的目标地址返回的是纯文本格式的翼型坐标文件,不存在HTML标签结构,使用BeautifulSoup解析会将整段内容识别为单个文本节点,无法拆分出结构化的坐标点。

修正方案

不需要引入BeautifulSoup,直接对返回的纯文本内容按行解析即可:

  • 发起请求后直接获取响应的文本内容,增加请求状态校验,避免请求失败时后续代码无意义运行
  • 按换行符拆分文本,过滤空行,第一行为翼型名称备注,从第二行开始为坐标数据
  • 逐行拆分每行的x、y坐标值,转为浮点型存入结构化列表
  • 将结构化列表转为DataFrame后导出为Excel文件,导出时取消索引列避免冗余数据
修正后完整代码
import pandas as pd
import requests

url = "https://m-selig.ae.illinois.edu/ads/coord/a18.dat"
resp = requests.get(url)
# 校验请求状态,请求失败直接抛出异常
resp.raise_for_status()

# 处理文本:拆分换行、去除首尾空白、过滤空行
lines = [line.strip() for line in resp.text.splitlines() if line.strip()]
coords = []
# 跳过第一行的翼型名称,逐行解析坐标
for line in lines[1:]:
    x, y = line.split()
    coords.append({
        "x": float(x),
        "y": float(y)
    })

# 导出为Excel
df = pd.DataFrame(coords)
df.to_excel("air_foil.xlsx", index=False)

如果你运行导出代码时报错缺少依赖,先执行pip install openpyxl安装Excel写入库即可。
也可以用pandas内置的文本读取接口简化解析逻辑,不需要手动逐行循环:

import pandas as pd
import requests
import io

url = "https://m-selig.ae.illinois.edu/ads/coord/a18.dat"
resp = requests.get(url)
resp.raise_for_status()
# 跳过第一行表头,按任意空白字符分隔,指定列名
df = pd.read_csv(io.StringIO(resp.text), skiprows=1, sep=r"\s+", names=["x", "y"])
df.to_excel("air_foil.xlsx", index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:15:34