【发布时间】:2018-12-29 18:31:36
【问题描述】:
我有一些 Python 代码可以将给定赛季的 NBA 球员的比赛日志(例如:the data here)刮到一个csv 文件中。我正在使用美丽的汤。我知道有一个选项可以通过单击网站上的链接来获取csv 版本,但是我在每一行都添加了一些内容,所以我觉得逐行抓取是最简单的选择。我们的目标是最终为每个球员的每个赛季编写代码。
代码如下所示:
import urllib
from bs4 import BeautifulSoup
def getData(url):
html = urllib.urlopen(url)
soup = BeautifulSoup(html, "html.parser")
type(soup)
file = open('/Users/Mika/Desktop/a_players.csv', 'a')
for table in soup.find_all("pre", class_ = ""):
dataline = table.getText
player_id = player_season_url[47:-14]
file.write(player_id + ',' + dataline + '\n')
file.close()
player_season_url = "https://www.basketball-reference.com/players/a/abdelal01/gamelog/1991/"
getData(player_season_url)
问题是这样的:从检查 URL 的元素可以看出,表格中的某些单元格具有空值。
<td class="right " data-stat="fg3_pct"></td>
(这是一个很好的单元格示例,其中的值(“1”)被正确抓取):
<th scope="row" class="right " data-stat="ranker" csk="1">1</th>
抓取时,行不均匀,跳过空值以创建一个值不合适的csv 文件。有没有办法确保在csv 文件中将这些空值替换为" "?
【问题讨论】:
-
您应该在您的问题中添加几行 html 以使您的 minimal reproducible example 完整 - 将其格式化为代码。示例 html 应该包含 good 单元格和坏单元格。
-
如果通过链接下载后无法添加到csv?
标签: python web-scraping beautifulsoup