You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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)

# 后续循环或合并操作和上面一致

优化点说明

  1. 效率提升:避免多次调用pd.read_html解析整个HTML字符串,一次性读取或逐个解析单表格,减少重复计算。
  2. 扩展性强:不管网页表格数量变化,循环都能自动适配,不用手动修改索引。
  3. 代码简洁:利用pandas内置的网页解析能力,省去冗余的请求和解析代码。

内容的提问来源于stack exchange,提问作者LBbrowns

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 06:35:28