首页 > 解决方案 > 从维基百科获取带有python标题的表格

问题描述

我正在尝试从维基百科的页面中获取多个表格,例如: https ://en.wikipedia.org/wiki/UEFA_Euro_2016_squads

当我尝试:

import pandas 
df = pandas.read_html("https://en.wikipedia.org/wiki/UEFA_Euro_2016_squads") 

然后我得到一个表列表,但我无法知道哪个表属于哪个团队。例如: 在此处输入图像描述

理想的情况是,如果我可以有一个 dict,如下所示:

{ '<Name of country A>':  '<Country A table in dataframe format>', 
  '<Name of country B>':  '<Country B table in dataframe format>' }

我还查看了以下库:

  1. Wikipedia-api:我在这里没有找到任何处理表格的功能
  2. 维基百科:这个看起来很旧,可能已经贬值了

标签: pythonpandasbeautifulsoup

解决方案


您快到了。要意识到的主要事情是,df您的代码中的实际上是一个表列表 - 准确地说是 29 个,其中只有前 24 个是相关的。

整理好之后,您还需要获取表格的国家/地区列表。因此,处理此问题的一种方法(可能还有其他方法):

import requests
import pandas as pd
from bs4 import BeautifulSoup as bs
url = "https://en.wikipedia.org/wiki/UEFA_Euro_2016_squads"
req = requests.get(url)
tables = pd.read_html(url) #or pd.read_html(req.text)
soup = bs(req.text,'lxml')
countries = soup.select('h3 span.mw-headline')[:24] #using css selectors

此时,如果你

for country, df in zip(countries, tables):
    print(country.text,df)

你会得到国家/团队对,你可以将它们分配给字典或其他东西。


推荐阅读