gpt4 book ai didi

python - 使用 html 进入 url 并抓取表格

转载 作者:行者123 更新时间:2023-12-01 06:31:20 25 4
gpt4 key购买 nike

我需要从玩家的各个页面中抓取表格,但有时如果有多个同名玩家,搜索将转到玩家列表。我想要那个在 NBA 打球的球员。例如,对于 Sergio Rodriguez,会显示一个列表 ( https://basketball.realgm.com/search?q=Sergio+Rodriguez ),因此它不会转到单个页面,而是显示“没有 Sergio Rodriguez 的国际表”。我想进入在 NBA 效力的塞尔吉奥·罗德里格斯 (Sergio Rodriguez) 的个人页面(排名第二)并抓取表格,但我不知道该怎么做。我如何使用 html 进入该特定玩家的页面并继续抓取?

HTML:

<tbody>
<tr>
<td class="nowrap tablesaw-cell-persist" rel="Rodriguez Febles, Sergio"><a href="/player/Sergio-Rodriguez-Febles/Summary/50443">Sergio Rodriguez Febles</a></td>
<td class="nowrap" rel="5">SF</td>
<td class="nowrap" rel="79">6-7</td>
<td class="nowrap" rel="202">202</td>
<td class="nowrap" rel="19931018"><a href="/info/birthdays/19931018/1">Oct 18, 1993</a></td>
<td class="nowrap" rel="2015"><a href="/nba/draft/past_drafts/2015" target="_blank">2015</a></td>
<td class="nowrap" rel="N/A">-</td>
<td rel="-">-</td>
</tr>
<tr>
<td class="nowrap tablesaw-cell-persist" rel="Rodriguez, Sergio"><a href="/player/Sergio-Rodriguez/Summary/85">Sergio Rodriguez</a></td>
<td class="nowrap" rel="1">PG</td>
<td class="nowrap" rel="75">6-3</td>
<td class="nowrap" rel="176">176</td>
<td class="nowrap" rel="19860612"><a href="/info/birthdays/19860612/1">Jun 12, 1986</a></td>
<td class="nowrap" rel="2006"><a href="/nba/draft/past_drafts/2006" target="_blank">2006</a></td>
<td class="nowrap" rel="N/A">-</td>
<td rel="NYK, PHL, POR, SAC"><a href="/nba/teams/New-York-Knicks/20/Rosters/Regular/2010">NYK</a>, <a href="/nba/teams/Philadelphia-Sixers/22/Rosters/Regular/2017">PHL</a>, <a href="/nba/teams/Portland-Trail-Blazers/24/Rosters/Regular/2009">POR</a>, <a href="/nba/teams/Sacramento-Kings/25/Rosters/Regular/2010">SAC</a></td>
</tr>
<tr>
<td class="nowrap tablesaw-cell-persist" rel="Rodriguez, Sergio"><a href="/player/Sergio-Rodriguez/Summary/39601">Sergio Rodriguez</a></td>
<td class="nowrap" rel="3">SG</td>
<td class="nowrap" rel="76">6-4</td>
<td class="nowrap" rel="-">-</td>
<td class="nowrap" rel="19771012"><a href="/info/birthdays/19771012/1">Oct 12, 1977</a></td>
<td class="nowrap" rel="1999"><a href="/nba/draft/past_drafts/1999" target="_blank">1999</a></td>
<td class="nowrap" rel="N/A">-</td>
<td rel="-">-</td>
</tr>
</tbody>
import requests
from bs4 import BeautifulSoup
import pandas as pd


playernames=['Carlos Delfino', 'Sergio Rodriguez']

result = pd.DataFrame()
for name in playernames:

fname=name.split(" ")[0]
lname=name.split(" ")[1]
url="https://basketball.realgm.com/search?q={}+{}".format(fname,lname)
response = requests.get(url)

soup = BeautifulSoup(response.content, 'html.parser')

# check the response url
if (response.url == "https://basketball.realgm.com/search..."):
# parse the search results, finding players who played in NBA
... get urls from the table ...
soup.table... # etc.
foreach url in table:
response = requests.get(player_url)
soup = BeautifulSoup(response.content, 'html.parser')
# call the parse function for a player page
...
parse_player(soup)
else: # we have a player page
# call the parse function for a player page, same as above
...
parse_player(soup)

try:
table1 = soup.find('h2',text='International Regular Season Stats - Per Game').findNext('table')
table2 = soup.find('h2',text='International Regular Season Stats - Advanced Stats').findNext('table')

df1 = pd.read_html(str(table1))[0]
df2 = pd.read_html(str(table2))[0]

commonCols = list(set(df1.columns) & set(df2.columns))
df = df1.merge(df2, how='left', on=commonCols)
df['Player'] = name

except:
print ('No international table for %s.' %name)
df = pd.DataFrame([name], columns=['Player'])

最佳答案

使用 if 条件检查元素的文本是否与 Sergio Rodriguez 匹配,然后转到该 block 并获取最新的 url,然后获取汤等。

import requests
from bs4 import BeautifulSoup
import pandas as pd


playernames=['Carlos Delfino', 'Sergio Rodriguez','Nikola Jokic','Brandon Jennings','Thon Maker']

result = pd.DataFrame()
for name in playernames:

fname=name.split(" ")[0]
lname=name.split(" ")[1]
url="https://basketball.realgm.com/search?q={}+{}".format(fname,lname)
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')

#Add check here if matches with `Sergio Rodriguez` then go to if clause
if soup.find('a',text=name).text==name:
url="https://basketball.realgm.com"+soup.find('a',text=name)['href']
print(url)
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')

try:
table1 = soup.find('h2',text='International Regular Season Stats - Per Game').findNext('table')
table2 = soup.find('h2',text='International Regular Season Stats - Advanced Stats').findNext('table')

df1 = pd.read_html(str(table1))[0]
df2 = pd.read_html(str(table2))[0]

commonCols = list(set(df1.columns) & set(df2.columns))
df = df1.merge(df2, how='left', on=commonCols)
df['Player'] = name
print(df)
except:
print ('No international table for %s.' %name)
df = pd.DataFrame([name], columns=['Player'])

控制台你可以看到df正在打印。

  https://basketball.realgm.com/player/Carlos-Delfino/Summary/446
Season Team ... PER Player
0 2002-03 Fortituto Kontatto Bologna ... 15.38 Carlos Delfino
1 2003-04 * All Teams ... 16.08 Carlos Delfino
2 2003-04 * Fortituto Kontatto Bologna ... 15.15 Carlos Delfino
3 2003-04 * Fortituto Kontatto Bologna ... 16.58 Carlos Delfino
4 2008-09 Khimki ... 19.48 Carlos Delfino
5 2016-17 Boca Juniors ... 14.82 Carlos Delfino
6 2017-18 * All Teams ... -0.76 Carlos Delfino
7 2017-18 * KIROLBET Baskonia Vitoria-Gasteiz ... 0.21 Carlos Delfino
8 2017-18 * KIROLBET Baskonia Vitoria-Gasteiz ... -6.67 Carlos Delfino
9 2018-19 * All Teams ... 15.37 Carlos Delfino
10 2018-19 * Fiat Torino ... 13.67 Carlos Delfino
11 2018-19 * Fortituto Kontatto Bologna ... 22.76 Carlos Delfino
12 2018-19 * Fiat Torino ... 12.78 Carlos Delfino

[13 rows x 41 columns]
https://basketball.realgm.com/player/Sergio-Rodriguez/Summary/85
Season Team ... PER Player
0 2003-04 Movistar Estudiantes ... 0.00 Sergio Rodriguez
1 2004-05 * All Teams ... 13.81 Sergio Rodriguez
2 2004-05 * Movistar Estudiantes ... 14.55 Sergio Rodriguez
3 2004-05 * Movistar Estudiantes ... 11.17 Sergio Rodriguez
4 2005-06 * All Teams ... 12.50 Sergio Rodriguez
5 2005-06 * Movistar Estudiantes ... 13.80 Sergio Rodriguez
6 2005-06 * Movistar Estudiantes ... 6.09 Sergio Rodriguez
7 2010-11 * All Teams ... 13.45 Sergio Rodriguez
8 2010-11 * Real Madrid ... 15.26 Sergio Rodriguez
9 2010-11 * Real Madrid ... 12.83 Sergio Rodriguez
10 2011-12 * All Teams ... 14.07 Sergio Rodriguez
11 2011-12 * Real Madrid ... 14.84 Sergio Rodriguez
12 2011-12 * Real Madrid ... 0.00 Sergio Rodriguez
13 2011-12 * Real Madrid ... 15.55 Sergio Rodriguez
14 2012-13 * All Teams ... 17.57 Sergio Rodriguez
15 2012-13 * Real Madrid ... 19.51 Sergio Rodriguez
16 2012-13 * Real Madrid ... 0.00 Sergio Rodriguez
17 2012-13 * Real Madrid ... 30.02 Sergio Rodriguez
18 2013-14 * All Teams ... 22.89 Sergio Rodriguez
19 2013-14 * Real Madrid ... 22.05 Sergio Rodriguez
20 2013-14 * Real Madrid ... 27.16 Sergio Rodriguez
21 2013-14 * Real Madrid ... 18.64 Sergio Rodriguez
22 2014-15 * All Teams ... 19.18 Sergio Rodriguez
23 2014-15 * Real Madrid ... 18.10 Sergio Rodriguez
24 2014-15 * Real Madrid ... 21.48 Sergio Rodriguez
25 2014-15 * Real Madrid ... 20.10 Sergio Rodriguez
26 2015-16 * All Teams ... 17.59 Sergio Rodriguez
27 2015-16 * Real Madrid ... 17.87 Sergio Rodriguez
28 2015-16 * Real Madrid ... 20.14 Sergio Rodriguez
29 2015-16 * Real Madrid ... 9.32 Sergio Rodriguez
30 2015-16 * Real Madrid ... 16.95 Sergio Rodriguez
31 2017-18 * All Teams ... 19.19 Sergio Rodriguez
32 2017-18 * CSKA Moscow ... 19.36 Sergio Rodriguez
33 2017-18 * CSKA Moscow ... 17.89 Sergio Rodriguez
34 2018-19 * All Teams ... 17.83 Sergio Rodriguez
35 2018-19 * CSKA Moscow ... 14.92 Sergio Rodriguez
36 2018-19 * CSKA Moscow ... 21.10 Sergio Rodriguez
37 2018-19 * CSKA Moscow ... -11.12 Sergio Rodriguez
38 2019-20 * All Teams ... 18.23 Sergio Rodriguez
39 2019-20 * EA7 Emporio Armani Milano ... 18.26 Sergio Rodriguez
40 2019-20 * EA7 Emporio Armani Milano ... 18.06 Sergio Rodriguez

[41 rows x 41 columns]
https://basketball.realgm.com/player/Nikola-Jokic/Summary/49571
Season Team League ... DRtg PER Player
0 2012-13 * All Teams All Leagues ... 98.5 14.15 Nikola Jokic
1 2012-13 * KK Mega Leks Junior Team Belgrade ... 95.2 21.13 Nikola Jokic
2 2012-13 * KK Mega Bemax KLS ... 104.9 3.48 Nikola Jokic
3 2013-14 * All Teams All Leagues ... 108.5 19.42 Nikola Jokic
4 2013-14 * KK Mega Bemax Liga ABA ... 108.4 21.18 Nikola Jokic
5 2013-14 * KK Mega Bemax KLS ... 109.0 21.79 Nikola Jokic
6 2014-15 * All Teams All Leagues ... 100.6 24.61 Nikola Jokic
7 2014-15 * KK Mega Bemax Liga ABA ... 100.5 24.02 Nikola Jokic
8 2014-15 * KK Mega Bemax KLS ... 100.8 31.50 Nikola Jokic

[9 rows x 41 columns]
https://basketball.realgm.com/player/Brandon-Jennings/Summary/1609
Season Team ... PER Player
0 2008-09 * All Teams ... 13.05 Brandon Jennings
1 2008-09 * Virtus Roma ... 12.94 Brandon Jennings
2 2008-09 * Virtus Roma ... 12.43 Brandon Jennings
3 2017-18 Shanxi Zhongyu ... 21.51 Brandon Jennings
4 2018-19 * All Teams ... 12.52 Brandon Jennings
5 2018-19 * Zenit Saint Petersburg ... 14.60 Brandon Jennings
6 2018-19 * Zenit Saint Petersburg ... 10.16 Brandon Jennings

[7 rows x 41 columns]
https://basketball.realgm.com/player/Thon-Maker/Summary/42192
No international table for Thon Maker.

关于python - 使用 html 进入 url 并抓取表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59901366/

25 4 0
文章推荐: jquery - 将
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com