2015-04-29 141 views
2

我试图从MLB网站上刮取关于MLB球员的一些信息。 但是,使用urllib2和BeautifulSoup,我无法找到'div'下的内容。但我可以清楚地看到Chrome上的内容。使用BeautifulSoup找不到'div'的内容

一个例子是,去页(http://mlb.mlb.com/team/player.jsp?player_id=150378)。右上方的状态信息显示“已发布”。但是我找不到使用BS4的这个字符串/内容。

这里是我的代码:

base_url = 'http://mlb.mlb.com/team/player.jsp?player_id=150378' 
request = urllib2.Request(base_url) 
response = urllib2.urlopen(request) 
soup = BeautifulSoup(response) 
player_status = soup.findAll('div',id='player_status') 
print player_status 

,我希望它有一个像“状态:已释放”的字符串, 但结果只显示

[<div id="player_status"></div>] 

我以前从来没有遇到过这种问题。有人可以帮我弄这个吗? 谢谢!

回答

1

页面上的播放器信息来自附加的XHR请求对JSON API的响应。你可以模拟它,例如,使用requests

>>> import requests 
>>> 
>>> url = "http://mlb.mlb.com/lookup/json/named.player_info.bam?sport_code=%27mlb%27&player_id=150378" 
>>> 
>>> response = requests.get(url) 
>>> data = response.json() 
>>> data['player_info']['queryResults']['row']['status'] 
Released 
+0

谢谢!但是如果我也想获得职业生涯统计数据呢?另外,为什么你的网址与我的网址不同?你如何获得该网址?谢谢! – Jason

+0

@Jason页面数据是通过对不同API端点的一组异步调用动态构建的 - 您可以在浏览器开发工具 - 网络选项卡中观察它们。 – alecxe

+0

谢谢!我不太了解API的概念,以及本网站如何调用不同的API来检索信息,以及如何使用网络选项卡。你能否介绍我可以教的任何链接,并让我着手这方面的工作? – Jason