BeautifulSoup findAll不返回网页上的值

时间:2019-04-29 21:37:30

标签: python web-scraping

我想在Yahoo Sports上网页抓取各个游戏页面。

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

在初始Box得分下,您会看到一个标题为“团队比较”的标签。我要获取的是每个团队的“进攻/防守队伍排名”下面的统计信息。

# 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,但是我是网络爬虫的新手,不确定如何进行此操作。

1 个答案:

答案 0 :(得分: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()