2013-01-16 135 views
0

我正在使用python來抓取網頁,我在迭代地做 - 所以我使用3個html文件來存儲網頁,但不知何故,我發現這些文件沒有被覆蓋,我仍然獲取舊文件。下面是我使用的代碼:Python中的文件覆蓋

def Vals(a,b): 
    file1="C:\\Users\\YAS_ayush\\Desktop\\dataset_recommendation\\file1.html" 
    file2="C:\\Users\\YAS_ayush\\Desktop\\dataset_recommendation\\file22.html" 
    file3="C:\\Users\\YAS_ayush\\Desktop\\dataset_recommendation\\file33.html" 

    Query1='"http://scholar.google.com/scholar?q=%22'+a+'%22&btnG=&hl=en&as_sdt=0%2C24"' 
    URL1='wget --user-agent Mozilla '+Query1+' -O '+file1 

    Query2='"http://scholar.google.com/scholar?q=%22'+b+'%22&btnG=&hl=en&as_sdt=0%2C24"' 
    URL2='wget --user-agent Mozilla '+Query2+' -O '+file2 

    Query3='"http://scholar.google.com/scholar?q=%22'+a+'%22+%22'+b+'%22&btnG=&hl=en&as_sdt=0%2C24"' 
    URL3='wget --user-agent Mozilla '+Query3+' -O '+file3 
## print Query1 
## print Query2 
## print Query3 
##  
## print URL1 
## print URL2 
## print URL3 


    os.system("wget "+ URL1) 
    os.system("wget "+ URL2) 
    os.system("wget "+ URL3) 

    f1 = open(file1,'r+') 
    f2 = open(file2,'r+') 
    f3 = open(file3,'r+') 

    S1=str(f1.readlines()) 

    start=S1.find("About")+6 
    stop=S1.find("results",start)-1 
    try: 
     val1=float((S1[start:stop]).replace(",","")) 
    except ValueError: 
     val1=Reads('C:\\Users\\YAS_ayush\\Desktop\\dataset_recommendation\\file1.html') 

    S1=str(f2.readlines()) 
    #f2.close() 
    start=S1.find("About")+6 
    stop=S1.find("results",start)-1 

    try: 
     val2=float((S1[start:stop]).replace(",","")) 
    except ValueError: 
     val2=Reads('C:\\Users\\YAS_ayush\\Desktop\\dataset_recommendation\\file22.html') 

    S1=str(f3.readlines()) 
    #f3.close() 
    start=S1.find("About")+6 
    stop=S1.find("results",start)-1 
    try: 
     val3=float((S1[start:stop]).replace(",","")) 
    except ValueError: 
     val3=Reads('C:\\Users\\YAS_ayush\\Desktop\\dataset_recommendation\\file33.html') 
    f1.truncate() 
    f2.truncate() 
    f3.truncate() 
    f1.close() 
    f2.close() 
    f3.close() 
    return (val1,val2,val3) 

誰能告訴如果在關閉文件中有一些錯誤,或者我應該怎樣收他們爲我的目的。

感謝

+0

看看你的'os.system'調用的參數。 – silvado

+0

爲什麼在網址和os.system調用中都是'wget'? – Seismoid

+0

我糾正了它,我仍然有問題。 –

回答

0

您使用的-O(大寫的O)選項,這一切都串接到1個檔。

「-O文件」 「--output文檔=文件」

的文件將不會被寫入到相應的文件,但都將被連接在一起,並寫入文件。如果使用' - '作爲文件,則文檔將打印到標準輸出,禁用鏈接轉換。 (使用'./-'打印到一個字面上名爲' - '的文件。) 使用'-O'並不是簡單地使用「使用名稱文件而不是URL中的名稱」;相反,它是類似於shell重定向:wget -O file http://foo旨在像wget -O - http://foo > file一樣工作;文件將立即被截斷,所有下載的內容將被寫入。

因此,'-N'(用於時間戳檢查)不支持與'-O'的組合:由於文件總是新創建的,因此它將始終有一個非常新的時間戳。如果使用這種組合,將會發出警告。

類似地,使用'-r'或'-p'和'-O'可能無法像您期望的那樣工作:Wget不會將第一個文件下載到文件,然後將其餘的文件下載到它們的正常名稱:all下載的內容將被放置在文件中。這在版本1.11中被禁用,但在1.11.2中已被恢復(帶有警告),因爲有些情況下這種行爲實際上可能有用。

請注意,只有下載單個文檔時才允許與'-k'的組合,因爲在這種情況下,它只會將所有相對URI轉換爲外部文檔; '-k'在多個URI被全部下載到單個文件時沒有意義; '-k'只能在輸出是常規文件時使用。

這段代碼取自wget's manual

希望這會有所幫助。

+0

'-o日誌文件' '--output-file = logfile' 將所有消息記錄到日誌文件。這些消息通常會報告爲標準錯誤。 '-a日誌文件' '--append-output =日誌文件' 追加到日誌文件。這與'-o'相同,只是附加到日誌文件而不是覆蓋舊的日誌文件。如果日誌文件不存在,則會創建一個新文件。 我想我正在這樣做。所以它很好 –

+0

我從wget的手冊中讀到它。 –

+1

有沒有辦法從Python模塊做到這一點? – FredFury