我正在尝试抓取棒球阵容数据,但只想返回球员姓名。但是,到目前为止,它给了我-位置,换行符,名称,换行符,然后是击球面。例如我想要
'D. Fletcher'
但是我得到
'LF\nD. Fletcher\nR'
此外,它还给了我页面上的所有玩家。我最好将它们按团队分组,这可能需要某种字典设置,但不确定该代码是什么样。
我尝试使用strip
函数,但我相信只能消除开头或结尾的问题,而不是中间的问题。我尝试研究如何仅从锚标记中获取标题信息,但还没有弄清楚该怎么做。
from bs4 import BeautifulSoup
import requests
url = 'https://www.rotowire.com/baseball/daily_lineups.htm'
r = requests.get(url)
soup = BeautifulSoup(r.text, "html.parser")
players = soup.find_all('li', {'class': 'lineup__player'})
####for link in players.find('a'):
##### print (link.string)
awayPlayers = [player.text.strip() for player in players]
print(awayPlayers)
答案 0 :(得分:2)
您应该只为.text
标签获得a
,而不是整个li
:
awayPlayers = [player.find('a').text.strip() for player in players]
这将导致如下所示:
['L. Martin', 'Jose Ramirez', 'J. Luplow', 'C. Santana', ...
答案 1 :(得分:1)
假设您要使用团队名称和球员来构建该词典,则可以执行以下操作。我不知道您是否想要突出显示的播放器,例如特雷弗·鲍尔(Trevor Bauer)?我添加了变量以在需要时保留它们。
通过:not伪类排除广告框和工具框,该类传递给要忽略的类列表。
from bs4 import BeautifulSoup as bs
import requests
r = requests.get('https://www.rotowire.com/baseball/daily-lineups.php')
soup = bs(r.content, 'lxml')
team_dict = {}
teams = [item.text for item in soup.select('.lineup__abbr')] #26
matches = {}
i = 0
for teambox in soup.select('.lineups > div:not(.is-ad, .is-tools)'):
team_visit = teams[i]
team_home = teams[i + 1]
highlights = teambox.select('.lineup__player-highlight-name a')
visit_highlight = highlights[0].text
home_highlight = highlights[1].text
match = team_visit + ' v ' + team_home
visitors = [item['title'] for item in teambox.select('.is-visit .lineup__player [title]')]
home = [item['title'] for item in teambox.select('.is-home .lineup__player [title]')]
matches[match] = {'visitor' : [{team_visit : visitors}] ,
'home' : [{team_home : home}]
}
i+=1
示例信息:
当前结构:
答案 2 :(得分:0)
我认为您快到了,只需要对其稍作调整即可。
awayPlayers = [player.find('a').text for player in players]
此列表理解功能将仅从列表中获取名称,然后从锚点中提取文本...您将仅获得名称列表:
['L. Martin',
'Jose Ramirez',
'J. Luplow'...]
答案 3 :(得分:-1)
您必须在其中找到a
标记和title
属性,请查看下面的答案。
awayPlayers = [player.find('a').get('title') for player in players]
print(awayPlayers)
输出为:
['Leonys Martin', 'Jose Ramirez', 'Jordan Luplow', 'Carlos Santana',