我正在用美麗的湯來解析這個library hour page。由於今天天氣不好,該網頁會向所有學生顯示警告消息。包含警報消息的HTML代碼如下:美麗的湯,忽略網頁上的重要內容
<div id="alert-container">
<div class="alert alert-error">
<p>The University will resume normal operations on Wednesday, March 15. All Library facilities will be open according to the Spring Break
schedule.
<a href="http://hours.cul.columbia.edu/">Library Hours »
</a>
</p>
</div>
</div>
<!--
<div class="alert alert-error" style="margin-bottom:15px;text align:center;">
<a href="http://library.columbia.edu/news/alert.html">Normal operations are expected to resume Monday, January 25. More information »</a>
</div>
-->
我要分析此警報消息,但事實證明,不管我用lxml
或html5lib
,它給我的錯誤解析結果:
<div id="alert-container">
</div>
<!--
<div class="alert alert-error" style="margin-bottom:15px;text-align:center;">\
<a href="http://library.columbia.edu/news/alert.html">Normal operations are expected to resume Monday, January 25. More information »
</a>
</div>
-->
也就是說,它刪除<div id="alert-container"></div>
中的所有內容,這對我來說似乎很陌生。我已經解析了一些網站,這是我第一次遇到這樣的問題,我想我跟着來分析網站的正確方法:
import urllib2
import html5lib
from bs4 import BeautifulSoup
url = "https://hours.library.columbia.edu"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page, 'lxml') #or html5lib
soup.find("div", {"id":"alert-container"})
和運行上面的代碼的結果是:
<div id="alert-container"></div>
我想知道這是網站本身的問題還是因爲解析器?
預先感謝您!
該網站可能會使用ajax獲取數據。但urllib2.urlopen返回靜態頁面。那麼如何使用Phantom JS?它在網站上執行js。並在ajax之後獲取頁面。 – ikicha
@ikicha非常感謝你! 'PhantomJS'是一個非常有用的工具,我會學習使用它! – lleiou
如果您是js中的新手,casperjs是替代品之一 – ikicha