BeautifulSoup仅解析一列而不是Python中的整个Wikipedia表

时间:2019-01-21 16:19:28

标签: html python-3.x beautifulsoup html-parsing wikipedia

我正在尝试使用Python中的BeautifulSoup解析位于here的第一张表。它解析了我的第一列,但是由于某种原因,它没有解析整个表。任何帮助表示赞赏!

注意:我正在尝试解析整个表并将其转换为pandas数据框

我的代码:

import requests
from bs4 import BeautifulSoup

WIKI_URL = requests.get("https://en.wikipedia.org/wiki/NCAA_Division_I_FBS_football_win-loss_records").text
soup = BeautifulSoup(WIKI_URL, features="lxml")
print(soup.prettify())
my_table = soup.find('table',{'class':'wikitable sortable'})
links=my_table.findAll('a')
print(links)

2 个答案:

答案 0 :(得分:5)

它仅解析一个列,因为您仅对第一列中的项目执行了findall。要解析整个表,您必须对表行<tr>执行一次findall,然后将表的每一行中的findall划分为<td>。现在,您只需为链接做一个findall,然后打印链接。

my_table = soup.find('table',{'class':'wikitable sortable'})
for row in mytable.findAll('tr'):
    print(','.join([td.get_text(strip=True) for td in row.findAll('td')]))

答案 1 :(得分:2)

注意:接受B.Adler的解决方案是一项很好的工作,也是明智的建议。此解决方案很简单,因此您在学习时可以看到一些替代方法。

每当我看到Subscription标签时,我通常都会先检查一下熊猫,看看是否可以从表中找到所需的内容。 type Subscription { customField(arg: String): String @aws_subscribe(mutations:["customPublish"]) } 将返回数据帧列表,您可以处理/操作这些数据帧以提取所需的内容。

<table>

您还可以浏览数据框,以查看具有所需数据的数据。 我只是在索引位置2使用了数据框,这是您要查找的第一个表

pd.read_html()

输出:

import pandas as pd

WIKI_URL = "https://en.wikipedia.org/wiki/NCAA_Division_I_FBS_football_win-loss_records"

tables = pd.read_html(WIKI_URL)