如何用Python Pandas提取多表格数据合并到数组?求优化方案
优化网页多表格提取与合并的方法
一、简化表格获取流程
你当前代码里用BeautifulSoup先抓取表格再传给pd.read_html,其实pandas的read_html可以直接读取网页URL,内部会自动完成请求、解析步骤,省去手动处理requests和BeautifulSoup的冗余操作。
二、自动循环处理所有表格
不用手动指定索引提取表格,直接把所有表格读取为DataFrame列表,再循环遍历或按需合并:
示例代码1:直接读取并批量处理
import pandas as pd weaponWikiLink = 'https://escapefromtarkov.fandom.com/wiki/Weapons' # 一次性读取网页所有表格,返回DataFrame组成的列表 all_weapon_tables = pd.read_html(weaponWikiLink) # 循环遍历所有表格,自动处理每一个 for table_index, df in enumerate(all_weapon_tables): print(f"=== 第{table_index+1}个武器表格 ===") print(df.head()) # 打印前5行预览 print("\n") # 如果所有表格结构一致(列名、数据类型匹配),直接合并成一个大DataFrame if all(df.columns.equals(all_weapon_tables[0].columns) for df in all_weapon_tables): merged_df = pd.concat(all_weapon_tables, ignore_index=True) print("=== 合并后的完整武器表格 ===") print(merged_df.head())
示例代码2:给不同类型表格添加标识后合并
如果网页里的表格对应不同武器类型(比如AR、SMG),可以给每个表格加一个武器类型列,再合并方便后续区分:
import pandas as pd weaponWikiLink = 'https://escapefromtarkov.fandom.com/wiki/Weapons' all_weapon_tables = pd.read_html(weaponWikiLink) # 对应网页中表格的武器类型顺序 weapon_categories = ["突击步枪", "冲锋枪", "轻机枪", "狙击枪", "霰弹枪", "手枪", "发射器"] processed_tables = [] for idx, df in enumerate(all_weapon_tables): if idx < len(weapon_categories): # 添加武器类型列 df["武器类型"] = weapon_categories[idx] processed_tables.append(df) # 合并所有带类型标识的表格 merged_df = pd.concat(processed_tables, ignore_index=True) print(merged_df[["武器类型", "Name", "Damage"]].head(10))
三、如果需要用BeautifulSoup过滤表格
如果网页里有无关表格(比如导航栏表格),可以先用BeautifulSoup过滤出目标表格(比如指定wikitable类),再逐个解析:
from bs4 import BeautifulSoup import requests import pandas as pd weaponWikiLink = 'https://escapefromtarkov.fandom.com/wiki/Weapons' reqWeapons = requests.get(weaponWikiLink) weaponsSoup = BeautifulSoup(reqWeapons.content, "lxml") # 只抓取带wikitable类的表格(过滤无关表格) target_tables = weaponsSoup.find_all('table', class_='wikitable') all_tables = [] for table in target_tables: # 逐个解析单个表格,避免重复解析整个HTML df = pd.read_html(str(table))[0] all_tables.append(df) # 后续循环或合并操作和上面一致
优化点说明
- 效率提升:避免多次调用
pd.read_html解析整个HTML字符串,一次性读取或逐个解析单表格,减少重复计算。 - 扩展性强:不管网页表格数量变化,循环都能自动适配,不用手动修改索引。
- 代码简洁:利用pandas内置的网页解析能力,省去冗余的请求和解析代码。
内容的提问来源于stack exchange,提问作者LBbrowns
相关产品推荐
相关产品推荐

