2014-01-19 171 views
-2

我正在python 2.7上創建我自己的網絡爬蟲,它將網站下載到我的計算機的路徑中,並以類似的方式將文件保存在現場例如在服務器上:如何更改HTML文件的鏈接到本地​​鏈接

https://stackoverflow.com/questions/ask?title=python+how+to+change+links+of+html+file+to+local+links

我將計算器的目錄裏面的問題,並在裏面這個網頁的HTML文件的目錄...

我怎樣才能改變鏈接到互聯網頁面鏈接到我下載的頁面,如果它們已經存在於我的電腦上?

例如,如果有: <a href="https://stackoverflow.com/questions">所以我將通過蟒蛇改變這個網站碼到 <a href="/questions">或這樣的事情..

我不知道是否有幫助,但是這是我使用的功能 高清downloadFile(路徑,URL):在一個單一的文件下載

try : 
    print "Downloading : " + url 
    path=path + urlparse(url).path 
    path , fileName = pathNameSplit(path) 


    make_sure_path_exists(path) 



    print "trying to downoad " + fileName 
    if (fileName.count(".") == 0):fileName = fileName + ".html" 
    #pickle.dump(url2Html(url) , open(path + fileName, "w")) 

    urllib.urlretrieve(url, path + fileName) 
    print "Download of " + url + " Completed" 
except Exception: 
    print "Sometihng occured in the download of " + url 
+0

如果我是你,我禾uld使用[請求](http://docs.python-requests.org/en/latest/)而不是urllib –

回答

1

每當你搶鏈接和網頁保存到路徑,保存鏈接和字典的路徑。

你還需要確保一些東西 1.每個路徑是唯一的鏈接(類型的可選,但真的有用,我猜) 2.你沒有覆蓋到那個路徑從另一個鏈接的任何其他頁面

然後,完成爬網後,您需要編輯「手動」(當然,與一些python代碼)下載的文件中的鏈接,而不是指向您的文件文件系統。

通過手動編輯,我的意思是使用某個模塊(re)來搜索並替換下載文件中的字符串。

執行此轉換後,您將失去對作爲文件原始源的網頁的引用。

如果您需要保留原來的在線url,您可以簡單地爲每個URL指定一個唯一的ID,並將其存儲在本地數據庫中(當然還有文件系統路徑 - 您下載文件的位置)。

如果您自己無法做到這一點,請尋求更多幫助。

[編輯]重新模塊 好,你可以做以下

import re 

html_file_content = u"asdf 1234 this should contain the source code of a html page that you downloaded" 
pattern = u"http://the-url-from-which-you-downloaded-the-html-file.com" 
path = u"d:/whatever/path/where/you/downloaded/the/html/file" 
new_file_content = re.sub(pattern, path, a) 

名稱new_file_content將源文件與文件系統路徑,而不是一個鏈接.. 。一定要連接一個文件://到path變量的開頭,所以瀏覽器可以識別這是一個有效的鏈接(如file://d:/downloads/python_crawler,不僅僅是d:/downloads/python_crawler

+1

你可以幫助使用部分: 「使用某個模塊(重新)來搜索並替換你的內部字符串下載的文件。「 – tamirz12345

+0

我在猜測're.sub(pattern,path,a)'應該是're.sub(pattern,path,html_file_content)'? – Lonefish