gpt4 book ai didi

python - 使用 BeautifulSoup 获取结果集中 td 标签的文本

转载 作者:行者123 更新时间:2023-12-01 09:27:11 24 4
gpt4 key购买 nike

我正在使用 BeautifulSoup 从以下网站提取表数据:https://afltables.com/afl/stats/teams/adelaide/2018_gbg.html

有许多表具有唯一的表 ID,我可以使用以下命令提取它们:

from bs4 import BeautifulSoup
from selenium import webdriver

stat_dict={'Disposals' : 'sortableTable0',
'Kicks' : 'sortableTable1',
'Marks' : 'sortableTable2',
'Handballs' : 'sortableTable3',
'Goals' : 'sortableTable4',
'Behinds' : 'sortableTable5',
'Hitouts' : 'sortableTable6',
'Tackles' : 'sortableTable7',
'Rebounds' : 'sortableTable8',
'Inside50s' : 'sortableTable9',
'Clearances': 'sortableTable10',
'Clangers' : 'sortableTable11',
'FreesFor' : 'sortableTable12',
'FreesAgainst' : 'sortableTable13',
'ContestedPosessions' : 'sortableTable14',
'UncontestedPosesseions' : 'sortableTable15',
'ContestedMarks' : 'sortableTable16',
'MarksInside50' : 'sortableTable17',
'OnePercenters' : 'sortableTable18',
'Bounces' : 'sortableTable19',
'GoalAssists' : 'sortableTable20',
'Timeplayed' : 'sortableTable21'}

driver = webdriver.Firefox(executable_path='...')
url="https://afltables.com/afl/stats/teams/adelaide/2018_gbg.html"
driver.get(url)

html = driver.page_source
soup = BeautifulSoup(html, "lxml")

stat_wanted='Disposals'
table = soup.find_all('table', {'id':stat_dict[stat_wanted]})

从我提取的表中,我想做相当于下面的代码,如果我使用 soup.find('tbody') ,该代码就可以工作。我知道这可能不是实现结果的最佳或最漂亮的方式,但我只是通过代码来了解它是如何工作的。

def get_disposals(team_lower_case, nplayers, nrounds):
list=[]
page=requests.get("https://afltables.com/afl/stats/teams/" +str(team_lower_case) +"/2018_gbg.html")
soup=BeautifulSoup(page.content, 'html.parser')
filter=soup.find('tbody')

for var in filter.find_all('tr'):
columns=var.find_all('td')
for val in columns:
list.append(val.get_text())
columns=['PlayerName']

for n in range(1,nrounds+1):
columns.append('R'+str(n))

df=pd.DataFrame(np.array(list).reshape(nplayers,nrounds+1), columns=columns)
return df

get_disposals("fremantle",30,8)

我已尝试使用下面的代码从所有标记中获取文本,但结果并未复制我在提取第一个代码片段中的特定表格时所实现的目标。

for tr in table:
zxc=tr.find_all('td')
print(zxc)
for var in zxc:
list=[]
list.append(var.get_text())
print(list)

但这只会产生标签及其内容的列表,而不是您在 get_text 按我希望的方式工作时所期望的内容。

最佳答案

您可能会发现以下方法更容易一些:

import pandas as pd    

tables = pd.read_html("https://afltables.com/afl/stats/teams/adelaide/2018_gbg.html")

for df in tables:
df.drop(df.columns[9:], axis=1, inplace=True) # remove unwanted columns
df.columns = df.columns.droplevel(0) # remove extra index level

for table in tables:
print(table[:3:], '\n') # show first 3 rows

这将为您提供 pandas 数据框的列表。每一个都包含每个表的所有信息。例如,第一个包含 Disposals:

         Player    R1    R2    R3    R4    R5    R6    R7  Tot
0 Atkins, Rory 14.0 17.0 22.0 28.0 24.0 28.0 16.0 149
1 Betts, Eddie 14.0 20.0 16.0 6.0 NaN NaN 10.0 66
2 Brown, Luke 15.0 23.0 23.0 16.0 16.0 24.0 11.0 128

Player R1 R2 R3 R4 R5 R6 R7 Tot
0 Atkins, Rory 8.0 13.0 12.0 16.0 17.0 18.0 10.0 94
1 Betts, Eddie 7.0 6.0 10.0 2.0 NaN NaN 7.0 32
2 Brown, Luke 10.0 17.0 17.0 10.0 11.0 16.0 9.0 90

然后您可以使用 pandas 来处理数据。

关于python - 使用 BeautifulSoup 获取结果集中 td 标签的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50287133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com