0

次のことを行うアプリケーションを構築しています。

  • .txt ファイルからホストを取得し、リストに配置します
  • 各 Web サイトのヘッダーをダウンロードし、別のリストに追加します
  • 特定の単語を含む行を、タイムスタンプ、特定の行、およびそれに属する URL を含むログファイルに出力します。

実際にはすべて正常に動作していますが、チェックされている URL を他の関数に渡して使用できるようにすることはできません。

このリンクのコード: http://pastebin.com/630FrspN

実際には、ログファイルの各エントリに同じ URL を出力します... ログファイル (websiteheaders,url) を for ループに入れると、機能しますが、ログファイルに URL がある回数だけエントリが出力されます。ホストファイル。

forループでチェックされている「url」をlogfile関数に渡す必要があります...

おそらく簡単な答えですが、見つけられないようです。前もって感謝します。

編集:以下のコードが最も関連性があると思います。

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)
4

2 に答える 2

3

forループ内のデータをログに記録する必要があります。ボールドットボールが彼の答えで示唆しているように辞書を作成することもできますが、ロギング以外の目的で処理された情報を使用する必要がない限り、反復ごとにログに書き込む方が理にかなっているようです。

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())
于 2012-12-17T19:22:26.577 に答える
2

を呼び出すとlogfile(websiteheaders, url)、urlは単にWebサイト配列の最後のURLになるため、ログファイルに記録されるのはそれだけです。私があなたなら、url-> headers情報を辞書に保存し、それをログファイルに渡します。

次のようなものを試してください:

headers = {}

そして、ループ内で次を使用します。

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

これで、各URLにヘッダーのリストが含まれる辞書ができました。これをログファイル関数に渡して、必要に応じてログに記録できます。

logfile(headers)

http://docs.python.org/2/tutorial/datastructures.htmlで辞書を読んでください

編集:構文とスペルを修正しました

于 2012-12-17T19:26:13.750 に答える