2014-01-15 167 views
0

上午通過發送請求爲解析網頁,內容中缺少urllib2.urlopen()

request = urllib2.Request(urllink, None, {'User-Agent':'Mosilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11'}) 
print request 
urlfile = urllib2.urlopen(request) 
page = urlfile.read() 
soup = BeautifulSoup(page) 

這裏的問題是一些在網頁內容中缺少響應來自未來的urllib2。的urlopen()。如果我保存了該頁面,我將獲取所有內容。 我已經注意到,通過ajax調用,更多的請求將進入網頁內部。是否有蟒蛇的任何方法發送請求

+0

這裏閱讀:http://stackoverflow.com/questions/8084707/extracting-information-from-ajax-based-sites-using-python –

回答

0

AJAX是異步的JS和XML來獲得整個頁面 - 這意味着你的文件,並在瀏覽器中加載後的一些內容是動態donloaded和DOM注入。

這對你意味着什麼?您擁有獲取完整文檔所需的全部信息,但是......您可能無法執行將下載和注入動態數據的JS。

如何繞過這個?我還沒有找到任何用於Python的JS引擎,但我仍在搜索。相反,您可以使用一些使用Selenium的瀏覽器引擎(它是與您的計算機上安裝的瀏覽器通信的庫,並允許您模擬用戶操作,如點擊,輸入等)。然後,您可以在這些操作之後檢查DOM並執行其他操作。

另一種方法是用Jython(如你正在使用P2.7,它應該是兼容的),並採取犀牛的優勢,或任何其他JS引擎的Java執行該代碼。