如何在表格的td列旁边刮一个td



我对网络抓取很陌生,但我正在一点一点地进步;不过这次我真的很难过。

我想做的是从ESPN NBA boxscore网站上抓取:http://espn.com/nba/boxscore?gameId=401160948

我想把没有参加比赛的球员的名字(用"DNP"标记(,然后在两个表的末尾加上原因,并把它们附加在一个列表中。

这是我的代码:

from bs4 import BeautifulSoup
page = requests.get('https://espn.com/nba/boxscore?gameId=401160948')
soup = BeautifulSoup(page.content, 'html.parser')
main_container = soup.find(id='main-container')
data = []
for hstat in main_container.find_all('tbody')[0]:
player_info = {}
player_info['name'] = hstat.find("td", {"class": "name"}).find('span').get_text()
data.append(player_info)
print(data)

上面的代码适用于tbody[0]和tbody[2],可能是因为所有td中都有完整的信息?不太确定。然而,对于包含DNP的玩家td值的tbody[1]和tbody[4],这是不起作用的,我正在尝试制作一个没有玩过的玩家表,所以我也不需要玩过的tbody[1][4]中的其他玩家,我也不知道如何排除,因为在这一点上,我已经缺乏解决方案。

我在这里该怎么办?需要帮助

谢谢。

您可以使用.find_previous()查找有关球员的所有信息:姓名和球队。

import requests
from bs4 import BeautifulSoup

url = 'https://www.espn.com/nba/boxscore?gameId=401160948'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')
for td in soup.select('td.dnp'):
team = td.find_previous('div', class_='team-name').text
reason = td.text.split('-')[-1]
name = td.find_previous('span', class_='').text
print('{:<20} {:<20} {}'.format(name, team, reason))

打印:

J. Evans             Warriors             LEFT ADDUCTOR STRAIN
M. Kidd-Gilchrist    Hornets              COACH'S DECISION
C. Martin            Hornets              COACH'S DECISION
W. Hernangomez       Hornets              COACH'S DECISION

试试这个。我检查了<tr>是否包含类为dnp<td>,然后获取<tr>的第一个<td>并将文本附加到data

import requests
from bs4 import BeautifulSoup
page = requests.get('https://espn.com/nba/boxscore?gameId=401160948')
soup = BeautifulSoup(page.content, 'html.parser')
main_container = soup.find(id='main-container')
data = []
for tbody_soup in main_container.find_all('tbody'):
# print(tbody_soup)
player_info = {}
for tr_soup in tbody_soup:
if tr_soup.find("td", {"class": "dnp"}) is not None:
data.append(tr_soup.find("td", {"class": "name"}).find('span').get_text())
print(data)

相关内容

  • 没有找到相关文章

最新更新