0

0

如何解决网页爬虫中因HTML结构误判导致的NaN链接值问题

心靈之曲

心靈之曲

发布时间:2026-02-21 11:08:01

|

152人浏览过

|

来源于php中文网

原创

如何解决网页爬虫中因HTML结构误判导致的NaN链接值问题

本文详解在使用BeautifulSoup爬取球员数据时,因错误定位href属性位置而产生NaN值的根本原因,并提供可直接运行的修复代码及关键注意事项。

本文详解在使用beautifulsoup爬取球员数据时,因错误定位`href`属性位置而产生nan值的根本原因,并提供可直接运行的修复代码及关键注意事项。

在网页爬虫实践中,NaN(Not a Number)值常被误认为是数据缺失或网络异常所致,但实际多数情况下源于对HTML DOM结构的误解——尤其是混淆了属性所在元素层级。以爬取 EliteProspects 网站NHL球员统计表为例,开发者试图从 标签中直接提取 href 属性,却忽略了该属性实际存在于其内部的 标签中。由于 span.get("href") 永远返回 None,Pandas 在赋值时自动将其转换为 NaN,导致“玩家主页链接”列全为空。

以下为修正后的完整流程(基于原始代码优化):

import requests
from bs4 import BeautifulSoup
import pandas as pd

start_url = 'https://www.eliteprospects.com/league/nhl/stats/2023-2024'
r = requests.get(start_url, timeout=10)
r.raise_for_status()  # 显式抛出HTTP错误,便于调试

soup = BeautifulSoup(r.content, "html.parser")
table = soup.find("table", class_="table table-striped table-sortable player-stats highlight-stats season")

# 提取表头(去重并清理换行符)
headers = [th.get_text(strip=True) for th in table.find_all("th")]
df = pd.DataFrame(columns=headers)

# 构建基础数据行
rows = table.find_all("tr")[1:]  # 跳过表头行
for row in rows:
    tds = row.find_all("td")
    if len(tds) == len(headers):  # 防止空行或结构异常
        data = [td.get_text(strip=True) for td in tds]
        df.loc[len(df)] = data

# ✅ 关键修复:正确提取玩家链接与姓名
df["Player_URL"] = None  # 预先添加列,避免SettingWithCopyWarning

for span in table.find_all("span", class_="txt-blue"):
    a_tag = span.find("a")
    if a_tag and a_tag.has_attr("href"):
        player_name = a_tag.get_text(strip=True)
        player_url = a_tag["href"]
        # 注意:需处理球员名中的括号和空格(如"Nikita Kucherov (RW)" → 匹配时需一致)
        # 此处假设df.Player已含完整显示名(含位置),否则需标准化
        mask = df["Player"] == player_name
        if mask.any():
            df.loc[mask, "Player_URL"] = player_url

# 数据清洗:统一去除换行与首尾空格
df = df.replace(r'\n+', ' ', regex=True)  # 替换多个换行符为单空格
df = df.applymap(lambda x: x.strip() if isinstance(x, str) else x)

print(df[["Player", "Team", "GP", "G", "A", "TP", "Player_URL"]].head())

? 核心注意事项

通塔师AI导航
通塔师AI导航

通塔师AI导航:专业的AI人工智能工具软件导航网站

下载

通过厘清HTML语义结构、强化数据清洗与异常防护,即可彻底规避此类“看似有数据、实则全NaN”的典型陷阱,为后续获取身高、体重等深层信息(需二次请求玩家个人页)奠定可靠基础。

立即学习前端免费学习笔记(深入)”;

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

75

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

7

2026.01.31

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

826

2023.08.22

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

686

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

22

2025.12.06

DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

3810

2024.08.14

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

776

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

247

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.4万人学习

AngularJS教程
AngularJS教程

共24课时 | 3.8万人学习

CSS教程
CSS教程

共754课时 | 34.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号