0

リンクが2〜3回繰り返される応答コードを確認する必要があるURLのこの長いリストがあります。各 URL の応答コードを確認するために、このスクリプトを作成しました。

connection =urllib.request.urlopen(url)
return connection.getcode()

URL は、この形式の XML で提供されます

 < entry key="something" > url</entry>
 < entry key="somethingelse" > url</entry> 

応答コードを属性 Key に関連付ける必要があるため、SET を使用したくありません。

今、私は間違いなく同じURLに対して複数のリクエストを行いたくないので、urlopenがキャッシュを使用するかどうかを検索していましたが、決定的な答えが見つかりませんでした. そうでない場合、この目的に使用できる他の手法は何ですか。

4

3 に答える 3

2

リクエストを行うときに URL を辞書 ( urls = {}) に保存し、後でその URL に対してすでにリクエストを行っているかどうかを確認できます。

if key not in urls:
  connection = urllib.request.urlopen(url)
  urls[key] = url
  return connection.getcode()

ところで、同じ URL に繰り返しリクエストを作成し (スクリプトを複数回実行)、永続的なキャッシュが必要な場合は、リクエストrequests-cacheで使用することをお勧めします。

于 2013-08-22T19:16:40.287 に答える
2

set()URLの python を作成してみませんか? そうすれば、各 URL は 1 回だけ含まれます。

于 2013-08-22T18:24:13.237 に答える
1

URL とキーをどのように関連付けていますか? 辞書?

ディクショナリを使用して、URL をその応答および追跡する必要があるその他の情報にマップできます。URL が既にディクショナリにある場合は、応答がわかります。したがって、1 つの辞書ができます。

url_cache = {
    "url1" : ("response", [key1,key2])
    }

別の方法で整理する必要がある場合は、別の辞書を使用するとそれほど難しくありません。

于 2013-08-22T19:15:07.697 に答える