使用pd.read_html爬取网页表格最后3列返回nan的问题求助
问题原因
你遇到的空值问题是因为目标页面的最后三列数据属于动态渲染内容,静态HTML源码里这部分单元格本身就是空的,数据是页面加载完成后通过JavaScript异步请求接口填充的,直接请求静态HTML自然拿不到对应数据。
解决方案
方案1:使用动态渲染工具爬取
用支持执行JS的工具加载完整页面后再提取表格,比如Selenium,示例代码如下:
import pandas as pd from selenium import webdriver from selenium.webdriver.chrome.options import Options # 配置无头模式 chrome_options = Options() chrome_options.add_argument("--headless=new") chrome_options.add_argument("--disable-blink-features=AutomationControlled") driver = webdriver.Chrome(options=chrome_options) url = 'https://www.actionnetwork.com/mlb/public-betting' driver.get(url) # 等待页面数据加载完成,可根据实际情况调整等待时长 driver.implicitly_wait(5) # 提取渲染完成的表格 todays_games = pd.read_html(driver.page_source)[0] print(todays_games) driver.quit()
这个方案不需要分析页面接口,实现简单,适合页面结构变化不大的场景。
方案2:直接请求数据接口
打开浏览器开发者工具的「网络」面板,筛选XHR/Fetch请求,可以找到页面用来获取投注数据的后端接口,直接请求这个接口拿到JSON格式的原始数据,再整理成表格即可。这个方案爬取速度更快,资源消耗更低,适合批量爬取的场景。
内容的提问来源于stack exchange,提问作者Tyler Woyshner
相关产品推荐
相关产品推荐

