[英]Beautiful Soup not returning everything in HTML file?
HTML noob在這里,所以我可能會誤解有關HTML文檔的內容,所以請多多包涵。
我正在使用Beautiful Soup在Python中解析網絡數據。 這是我的代碼:
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打印出來時,我在檢查Web上的元素時看到的東西不是在Python的print語句中。
您可以使用此邏輯提取任何文本。 此代碼使您可以提取任何標簽之間的任何數據。 輸出-FINAL
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;
看來您的問題不在於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的數據,而不是包裝本身。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.