2012-01-12 99 views
4

我有一個JavaScript代碼,只顯示一個HTML頁面:保存HTML文本

javascript:h=document.getElementsByTagName('html')[0].innerHTML;function%20disp(h){h=h.replace(/</g,%20'\n&lt;');h=h.replace(/>/g,'&gt;');document.getElementsByTagName('body')[0].innerHTML='<pre>&lt;html&gt;'+h.replace(/(\n|\r)+/g,'\n')+'&lt;/html&gt;</pre>';}void(disp(h)); 

的源代碼,我的代碼保存爲在Firefox書籤。因此,在加載網頁後,當我從書籤中選擇代碼時,它會顯示源代碼。

現在我嘗試使用python保存html文件。

from BeautifulSoup import BeautifulSoup 
from BeautifulSoup import BeautifulStoneSoup 
import BeautifulSoup 

import urllib2 
from BeautifulSoup import BeautifulSoup 

page = urllib2.urlopen("http://www.doctorisin.net/") 
soup = BeautifulSoup(page) 
print soup.prettify() 
fp = open('file.txt','wb') 
fp.write(soup.prettify()) 

但它沒有javascript代碼所有的內容。保存的文件和javascript顯示的源文件不一樣。也許python代碼不能從html頁面獲取所有代碼(javascript/css標記代碼)。問題是什麼?難道我做錯了什麼?需要幫助

謝謝

EDITED

由於我的問題的一個例子,http://phpjunkyard.com/tutorials/cut-paste-code.php(隨機網站)圍棋到這個網站,右鍵點擊並選擇查看頁面源(firefox)複製源並保存在一個文本文件中。現在保存頁面(保存頁面爲)。你可以看到兩者不一樣。保存的頁面(另存爲)還有更多內容。 Python給出了類似於源代碼的輸出(查看頁面源代碼)。它缺少一些腳本,表單等。

+0

這看起來像一個BeautifulSoup問題,而不是Ubuntu問題。您不是簡單地將源文件保存爲文本,而是在保存之前使用一些代碼修改源文件。如果您想保存源代碼,請嘗試從您選擇的瀏覽器中右鍵單擊菜單,並且應該可以很容易地保存它。 – Wolfger 2012-01-12 13:21:53

+0

爲什麼你期望BeautifulSoup呈現JavaScript? – theta 2012-01-12 14:04:41

+0

另外,爲什麼你的代碼片段中有這麼冗餘的導入? – theta 2012-01-12 14:08:22

回答

4

如果要保存網絡服務器提供的確切HTML,請不要使用BeautifulSoup(這是一個HTML解析器,並且可能在修復代碼時修改代碼);這將是一個更好的解決方案:

import urllib2 
file("my_file.txt", "w").write(urllib2.urlopen("http://www.doctorisin.net/").read()) 

Firefox的默認不僅節省了HTML而且還需要在頁面中顯示(包括CSS和腳本)的文件。

+0

謝謝。我已經試過了。請參閱編輯過的帖子。我用一個例子描述了我的問題。 – shantanu 2012-01-12 17:46:54

1

你所看到的是靜態和動態網頁之間的區別。

與靜態網頁不同,動態網頁可以在加載時修改底層html。 Javascript可以轉儲已加載頁面的完整HTML,因爲它可以訪問由瀏覽器創建的修改過的DOM。

相反,如果從服務器下載相同的網頁並直接輸入到BeautifulSoup,它將只能將其解析爲靜態html。要獲得完整的動態內容,該頁面需要先由瀏覽器(或同等版本)進行處理。