2012-12-17 16 views
0

我建設,做以下事情的應用程序:在功能使用Python for循環變量

  • 從.txt文件中獲取主機,並將它們放到一個列表
  • 下載標題爲每個網站將它們放入另一個列表
  • 將包含特定單詞的行打印到包含時間戳的日誌文件中,該日誌文件包含特定行和屬於該行的url。

一切實際工作正常,但我似乎無法轉嫁是beeing檢查其它功能,使其可以使用的URL。

在這個鏈接的代碼:http://pastebin.com/630FrspN

將實際打印相同的URL在日誌文件中的每個條目......如果我把日誌文件(websiteheaders,URL)進入for循環,它會工作,但它會在我的主機文件中多次打印日誌文件中的條目。

不知何故,我需要通過對在beeing檢查循環到日誌文件功能「URL」 ......

Probaly一個簡單的答案,但我似乎無法找到它。提前致謝。

編輯:我認爲這下面的代碼是最相關的。

def headerophalen(websites): 

    for url in websites: 
     try: 
      response = urllib2.urlopen(url) 
      headers = str(response.info()) 
      websiteheaders.extend(headers.splitlines()) 
     except urllib2.HTTPError, error: 
      print "Error opening URL: ", url, "HTTP Errorcode: ", error.code 
      continue 

    logfile(websiteheaders, url) 
+0

,如果你能請的代碼的相關部分粘貼到的問題。 –

回答

3

您需要記錄for循環內的數據。你可以建立一個dict,就像balldotballs在他的回答中所建議的那樣,但是似乎只是寫信給你的日誌,每次迭代都會更有意義,除非你需要將處理後的信息用於日誌以外的其他東西。

def headerophalen(websites): 

    for url in websites: 
     try: 
      response = urllib2.urlopen(url) 
     except urllib2.HTTPError, error: 
      print "Error opening URL: ", url, "HTTP Errorcode: ", error.code 
     else: 
      logfile(url, str(response.info()).splitlines()) 
+0

這實際上沒有什麼大聲笑,它現在不會做任何事情,因爲我不想在打開URL時記錄日誌文件中的某些內容。for循環(下載頭文件並將它們放入列表中)之後,我想要啓動一個名爲logfile的新函數,它將使用頭文件 – bryanvan

+0

執行其他操作。我再次查看了您的問題,注意到了這一點,並相應地調整了我的答案。儘管你的邏輯存在更深層次的缺陷。對單個URL執行任何'logfiles'操作都沒有意義,但是'websiteheaders'完整列表。你究竟想在這裏做什麼?你也不會初始化'websiteheaders',所以當你嘗試'extend'的時候會引發一個異常。 –

+0

我擴展'websiteheaders'時沒有收到錯誤,因爲它是在我的代碼頂部初始化的。在日誌文件功能中,我想打印檢查過的URL,將時間戳與標題中的「服務器」行一起打印到日誌文件中。 – bryanvan

2

當你調用logfile(websiteheaders, url),網址只會在你的網站數組最後瀏覽的網址,這樣是會在你的日誌文件中記錄的唯一一個。如果我是你,我會將url->標題信息保存在字典中,並將其傳遞到日誌文件中。

嘗試類似:

headers = {} 

然後你的循環使用中:

response = urllib2.urlopen(url) 
headerlist = str(response.info()) 
headers[url] = headerlist.splitlines() 

現在你有每個URL都有標題列表的字典。您可以將它傳遞給日誌文件功能,然後根據需要將其記錄下來。

logfile(headers) 

在 ​​

編輯閱讀上的詞典:固定我的語法和拼寫

+0

謝謝,我認爲這應該做到這一點,但由於我是Python中的nuub,我需要幾天的時間才能將其應用到我當前的日誌功能中。因爲如果我在for語句中實現它,它實際上什麼都不做。 – bryanvan

+0

嘗試類似'for k,v在headers.iteritems():print k,v'中,您將看到如何使用它。 – ballsatballsdotballs

+0

事實上,我現在看到這些對,首先是URL然後是標題。現在,我只需要找到一種方法在頭文件(字典的值)中查找「服務器」值,然後將它們拆分爲僅打印該信息... – bryanvan