如何在Python函数中跳过引发错误的URL以合并多网页表格数据?
跳过无表格的URL并合并有效表格数据
这个问题太常见了——批量处理网页表格时,总会碰到几个“不听话”的链接:要么页面里根本没表格,要么页面结构异常,直接导致整个脚本崩溃。解决思路很简单:给读取表格的逻辑加上异常处理,捕获错误后跳过有问题的URL,继续处理剩下的正常链接就行。
下面是修改后的代码,既保留了你原有的合并逻辑,又加入了错误处理机制:
import pandas as pd urls = [ 'https://basketball.realgm.com/player/Stephen-Curry/GameLogs/1600', 'https://basketball.realgm.com/player/LeBron-James/GameLogs/250', 'https://basketball.realgm.com/player/Anthony-Edwards/GameLogs/117444', 'https://basketball.realgm.com/player/Jalen-Washington/GameLogs/151233' ] def fxGameLogs(URL: list) -> pd.DataFrame: dfs = [] # 存储成功读取的表格 for idx, x in enumerate(URL): try: # 尝试读取网页中的表格集合 GameLog_list = pd.read_html(x) # 取第一个表格(和你原逻辑保持一致) GameLogs = GameLog_list[0] dfs.append(GameLogs) print(f"✅ 成功处理第{idx+1}个URL: {x}") except ValueError as e: # 捕获read_html找不到表格的典型错误 print(f"❌ 跳过第{idx+1}个URL: {x} - 原因: 未找到可解析的表格 ({str(e)})") except Exception as e: # 兜底处理其他意外(比如网络超时、页面404等) print(f"❌ 跳过第{idx+1}个URL: {x} - 未知错误: {str(e)}") # 防止所有URL都失败导致concat报错,返回空DataFrame if not dfs: return pd.DataFrame() # 合并所有有效表格并重置索引 return pd.concat(dfs).reset_index(drop=True) GameLogs = fxGameLogs(urls) print(GameLogs)
几个关键点说明:
- 精准捕获错误:用
ValueError专门处理pd.read_html找不到表格的情况,用通用Exception兜底其他意外,避免遗漏问题。 - 可视化反馈:打印每个URL的处理状态,方便你快速定位哪个链接出了问题。
- 边界情况处理:如果所有URL都读取失败,返回空DataFrame,避免
pd.concat因为空列表抛出错误。
这样修改后,你的函数就会自动跳过那些“捣乱”的URL,只合并成功获取到的表格数据啦!
内容的提问来源于stack exchange,提问作者clay
相关产品推荐
相关产品推荐

