【发布时间】:2021-11-08 10:27:50
【问题描述】:
我正在尝试将此网页解析为 pandas 数据框以进行分析,但该页面的设置使得该表只有两列使用,一列包含名称,另一列包含所有其他信息细胞。
例如,下面是我的代码:
import bs4
from bs4 import BeautifulSoup
from urllib.request import urlopen
import pandas as pd
url = "https://education.scripps.edu/alumni/graduate-alumni-list/index.html"
page = urlopen(url)
html = page.read().decode("utf-8")
soup = BeautifulSoup(html, "html.parser")
table = soup.find('tbody')
td = table.find_all('td')
data = []
for element in td:
sub_data = []
for sub_element in element:
try:
sub_data.append(sub_element.get_text())
except:
continue
data.append(sub_data)
dataFrame = pd.DataFrame(data = data)
df = dataFrame[[1,3]]
df = df.dropna()
所以 df.iat[0,1] 将包含课程、防御年份、顾问、论文题目和本科院校。 HTML 仅使用“br”和“strong”来分隔这些值,我想知道是否有任何方法可以将此文本分成不同的列,以便列是“名称”、“程序”、“国防年”和这样,而不是一个包含所有信息的单元格。
非常感谢!
【问题讨论】:
标签: python pandas dataframe web-scraping beautifulsoup