簡體   English   中英

通過從文件中讀取URL列表來保存網頁

[英]Saving the web pages by reading the list of urls from file

我只能想到的唯一方法就是解決此問題,但它列出了一些局限性。 有人可以建議解決這個問題的另一種方式嗎?

我們提供了一個帶有999999 URL的文本文件。 我們必須編寫一個python程序來讀取此文件並將所有網頁保存在名為“ saved_pa​​ge”的文件夾中。

我已經嘗試解決這個問題,

import os
import urllib
save_path='C:/test/home_page/'
Name = os.path.join(save_path, "test.txt")
file = open('soop.txt', 'r')
'''all the urls are in the soop.txt file '''
for line in file:
    data = urllib.urlopen(line)
    for line in data:
        f=open(Name)
        lines=f.readlines()
        f.close()
        lines.append(line)
        f=open(Name,"w")
        f.writelines(lines)
        f.close()
file.close()

此代碼有一些限制,

1)。如果網絡中斷,此代碼將重新啟動。

2)。如果遇到錯誤的URL(即服務器無響應),則此代碼將被卡住。

3)。我目前正在按順序下載-對於沒有URL的情況,這將非常緩慢。

那么有人可以提出一種解決這些問題的解決方案嗎?

一些說明:

通過重新啟動點方法可以輕松固定點1和2。 對於在腳本內重新啟動,只需執行一個循環,直到 for line in file包含讀取部分的for line in filefor line in file全部正常或最大嘗試次數為止,並且只有在成功下載文件后才進行寫操作。 您仍然必須決定要處理的文件是否為不可下載狀態:記錄錯誤並繼續處理下一個文件,或者中止整個作業。

如果您希望以后能夠重新啟動失敗的作業,則應將成功下載的文件列表保留在某個位置( state.txt文件)。 在獲取並寫入每個文件之后,您進行寫入(和沖洗 )。 但是要真正證明是布爾值,您應該在獲取文件后寫入一個元素,而在成功寫入文件后寫入一個元素。 這樣,在重新啟動時,您可以通過簡單地測試狀態文件及其內容的存在來知道輸出文件可能包含部分寫入的文件(停電,中斷等)。

第三點要棘手得多。 要允許並行下載,您將必須使用線程或異步。 但是,您還必須同步所有這些內容,以確保以正確的順序將文件寫入輸出文件。 如果您有能力將所有內容保留在內存中,則一種簡單的方法是首先使用並行化方法下載所有內容(JF Sebastian提供的鏈接可以提供幫助),然后按順序進行編寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM