删除网页抓取中的换行符

时间:2019-04-11 03:48:12

标签: python web-scraping beautifulsoup

我正在尝试抓取棒球阵容数据,但只想返回球员姓名。但是,到目前为止,它给了我-位置,换行符,名称,换行符,然后是击球面。例如我想要

'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)

4 个答案:

答案 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

示例信息:

enter image description here


当前结构:

答案 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',