Python中如何使用pd.read_html无报错提取网页表格数据?
问题根因
pd.read_html()方法不支持直接传入BeautifulSoup返回的Tag类型对象,仅支持接收HTML字符串、本地文件路径、可访问的网络URL作为入参,参数类型不匹配触发了本次类型错误。
修复方案
- 提取表格后先校验是否成功获取到目标表格节点,避免空值报错
- 将获取到的表格Tag对象转为HTML字符串格式,再传入
pd.read_html()解析 - 由于
pd.read_html()会返回页面中所有匹配表格组成的DataFrame列表,取列表第一个元素即为目标表格
完整修复后代码
import requests from bs4 import BeautifulSoup import pandas as pd header = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' } url = "https://www.worldometers.info/coronavirus/#countries" req = requests.get(url, headers=header) # 校验请求是否成功 if req.status_code != 200: print("页面请求失败,请检查网络或请求头配置") exit() # 提取目标表格节点 soup = BeautifulSoup(req.content, 'lxml') tables = soup.find('table',{'id':'main_table_countries_today'}) # 校验表格是否成功提取 if not tables: print("未找到目标表格,请检查页面结构或节点ID是否变更") exit() # 转成HTML字符串后传入pandas解析,取第一个表格即为目标数据 df = pd.read_html(str(tables))[0] print(df)
运行效果
代码执行后会直接输出全球各国新冠疫情统计数据表格,包含累计确诊、死亡病例、康复病例、现有确诊等统计字段,匹配预期展示效果。
内容的提问来源于stack exchange,提问作者daniel malten
相关产品推荐
相关产品推荐

