HTML noob在这里,所以我可能会误解HTML文档,所以请耐心等待。
我正在使用Beautiful Soup来解析Python中的Web数据。这是我的代码:
import urllib
import BeautifulSoup
url = "http://www.nba.com/gameline/20160323/"
page = urllib.urlopen(url).read()
soup = BeautifulSoup.BeautifulSoup(page)
indicateGameDone = str(soup.find("div", {"class": "nbaModTopStatus"}))
print indicateGameDone
现在,如果您查看网站,HTML代码就行<p class="nbaLiveStatTxSm"> FINAL </p>
,(在页面上的第一个ATL-WAS游戏中检查容器左侧的“最终”文本,以查看它适用于你自己。)但是当我运行上面的代码时,我的代码不会返回网页上显示的'FINAL',而nbaLiveStatTxSm
类是空的。
在我的机器上,这是我打印indicateGameDone
时的输出:
<div class="nbaModTopStatus"><p class="nbaLiveStatTx">Live</p><p class="nbaLiveStatTxSm"></p><p class="nbaFnlStatTx">Final</p><p class="nbaFnlStatTxSm"></p></div>
有谁知道为什么会这样?
编辑:澄清:问题是没有检索标签内的文本,问题是当我从网站上获取html代码并在python中打印出来时,我在检查元素时看到了什么Python中的print语句中没有web。答案 0 :(得分:2)
您可以使用此逻辑提取任何文本。 此代码允许您在任何标记之间提取任何数据。 输出 - 最终
import urllib
from bs4 import BeautifulSoup
url = "http://www.nba.com/gameline/20160323/"
page = urllib.urlopen(url)
soup = BeautifulSoup(page)
indicateGameDone = soup.find("div", {"class": "nbaFnlStatTx"})
for p in indicateGameDone:
p_text = soup.find("p", {"class": "nbaFnlStatTxSm"})
print(p_text.getText())
break;
答案 1 :(得分:1)
看起来你的问题不在于BeautifulSoup,而在于urllib。
尝试运行以下命令
>>> import urllib
>>> url = "http://www.nba.com/gameline/20160323/"
>>> page = urllib.urlopen(url).read()
>>> page.find('<div class="nbaModTopStatus">')
44230
考虑到Beautiful Soup能够找到div本身,这并不奇怪。但是,当我们深入了解urllib实际收集的内容时,我们可以通过运行
看到<p class="nbaFnlStatTxSm">
为空
>>> page[44230:45000]
'<div class="nbaModTopStatus"><p class="nbaLiveStatTx">Live</p><p class="nbaLiveStatTxSm"></p><p class="nbaFnlStatTx">Final</p><p class="nbaFnlStatTxSm"></p></div><div id="nbaGLBroadcast"><a href="/leaguepass"><img src="/.element/img/3.0/sect/gameline/broadcasters/lp.png"></a></div><div class="nbaTeamsRow"><div class="nbaModTopTeamScr nbaModTopTeamAw"><h5 class="nbaModTopTeamName awayteam">ATL</h5><img src="http://i.cdn.turner.com/nba/nba/.element/img/2.0/sect/gameline/teams/ATL.gif" width="34" height="22" title="Atlanta Hawks"><h4 class="nbaModTopTeamNum win"></h4></div><div class="nbaModTopTeamScr nbaModTopTeamHm"><h5 class="nbaModTopTeamName hometeam">WAS</h5><img src="http://i.cdn.turner.com/nba/nba/.element/img/2.0/sect/gameline/teams/WAS.gif" width="34" '
您可以看到标记为空,因此您的问题是传递给Beautiful Soup的数据,而不是包本身。
答案 2 :(得分:0)
find
语句,然后使用.text
命令获取您所追踪的HTML中文本的字符串表示。对上面列出的代码进行一些小修改后,代码就会运行。
import urllib
from bs4 import BeautifulSoup
url = "http://www.nba.com/gameline/20160323/"
page = urllib.urlopen(url).read()
soup = BeautifulSoup(page)
indicateGameDone = soup.find("div", {"class": "nbaModTopStatus"})
print indicateGameDone.text ## "LiveFinal "
发表评论:
import urllib
from bs4 import BeautifulSoup
url = "http://www.nba.com/gameline/20160323/"
page = urllib.urlopen(url).read()
soup = BeautifulSoup(page)
indicateGameDone = soup.find("p", {"class": "nbaFnlStatTx"})
print indicateGameDone.text