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

2024-05-16 20:45:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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]})

从我提取的表中,我想做与下面代码相同的代码,如果我使用汤。找('tbody')。我知道这可能不是实现结果的最好或最漂亮的方法,但我只是在玩玩代码来了解它是如何工作的。在

^{pr2}$

我尝试了下面的代码从所有标记中获取文本,但结果并没有复制在第一段代码中提取特定表时所能达到的效果。在

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像我所希望的那样工作的话。在


Tags: 代码httpscomgethtmlstatsdrivertable
1条回答
网友
1楼 · 发布于 2024-05-16 20:45:30

您可能会发现以下方法更简单一些:

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

^{pr2}$

然后你可以用熊猫来处理数据。在

相关问题 更多 >