我想在雅虎体育网上搜索个人游戏页面。
这是我想要抓取的网页类型的一个例子: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,也不确定如何解决这个问题。
这些数据实际上是通过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()