BeautifulSoup findAll不返回网页上的值

问题描述 投票:0回答:1

我想在雅虎体育网上搜索个人游戏页面。

这是我想要抓取的网页类型的一个例子:https://sports.yahoo.com/nfl/atlanta-falcons-philadelphia-eagles-20180906021/?section=teamcomparison

在最初的Box Score下方,您会看到一个标题为“Team Comparison”的标签。我想要获得的是每支球队“进攻/防守球队排名”下的统计数据。

# The URL i would like to scrape.
url = 'https://sports.yahoo.com/nfl/atlanta-falcons-philadelphia-eagles- 
20180906021/?section=teamcomparison'

# Reading in the HTML code with BeautifulSoup
uClient = uReq(url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")
#page_soup

# Finding the segment of HTML code with my desired stats
stats = page_soup.findAll("div", {"class": "D(ib) Bxz(bb) W(100%)"})
print(stats)
### Result line -> In [743]: []

这应该是给我每队的进攻和防守等级列表(例如,每场比赛的亚特兰大传球码数= 309.3和每场比赛传球码数= 4),但它只给我“[]”并且没有返回任何值。我相信这是因为网页中嵌入了Javascript,但我不熟悉webscraping,也不确定如何解决这个问题。

python web-scraping
1个回答
1
投票

这些数据实际上是通过AJAX从API下载的,所以你不需要抓它,你可以自己问API,如果你知道如何编写URL。例如,对于您在帖子中提供的页面,URL为:https://sports.yahoo.com/site/api/resource/sports.game.team_stat_leaders;id=nfl.g.20180906021

因此,您只需要知道每个游戏的网址的id部分。你将得到的JSON有点模糊,但过了一段时间后,可以理解发生了什么:)。

获取数据的示例代码:

import requests
response = requests.get("https://sports.yahoo.com/site/api/resource/sports.game.team_stat_leaders;id=nfl.g.20180906021")
data = response.json()
© www.soinside.com 2019 - 2024. All rights reserved.