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

