在Web抓取中删除换行符

问题描述 投票:2回答:4

我正在尝试刮掉棒球阵容数据但只想返回球员名字。但是,截至目前,它正在给我 - 位置,换行符,姓名,换行符,然后是击球方。比如我想要的

'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)
python web-scraping beautifulsoup
4个回答
2
投票

你应该只获得.text标签的a,而不是整个li

awayPlayers = [player.find('a').text.strip() for player in players]

这将导致类似以下内容:

['L. Martin', 'Jose Ramirez', 'J. Luplow', 'C. Santana', ...

1
投票

假设你想用团队名称和玩家建立那个dict,你可以做如下的事情。我不知道你是否想要突出显示的玩家,例如特雷弗鲍尔?我已经添加了变量来保存它们以备不时之需。

广告框和工具框通过以下方式排除:非伪类,它传递要忽略的类列表。

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

示例信息:

enter image description here


目前的结构:


0
投票

我觉得你几乎就在那里,你只需稍微调整一下:

 awayPlayers = [player.find('a').text for player in players]

这个列表理解只会从列表中获取名称,然后从锚点中提取文本...您只需获取一个名称列表:

['L. Martin',
 'Jose Ramirez',
 'J. Luplow'...]

-1
投票

你必须在其中找到a标签和title属性,请查看以下答案。

awayPlayers = [player.find('a').get('title') for player in players]
print(awayPlayers)

输出是:

['Leonys Martin', 'Jose Ramirez', 'Jordan Luplow', 'Carlos Santana',
© www.soinside.com 2019 - 2024. All rights reserved.