urllib.request.urlopen(url)是否使用缓存?

时间:2013-08-22 18:19:56

标签: python urllib

我有这么长的URL列表,我需要检查响应代码,其中链接重复2-3次。我编写了这个脚本来检查每个URL的响应代码。

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

URL以这种格式提供XML格式

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

我必须将响应代码与属性Key关联起来,所以我不想使用SET。

现在我绝对不希望对同一个URL发出超过1个请求,所以我在搜索urlopen是否使用缓存但是没有找到确定的答案。如果没有,可以使用其他技术来实现此目的。

3 个答案:

答案 0 :(得分:2)

为什么不创建一个python set()的URL?这样每个网址只包含一次。

答案 1 :(得分:2)

您可以在提出请求时将网址存储在字典(urls = {})中,并检查您之后是否已经对该网址提出了要求:

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

顺便说一句,如果你反复向相同的网址发出请求(多次运行脚本),并且需要持久缓存,我建议requests使用requests-cache

答案 2 :(得分:1)

如何将网址与密钥相关联?字典?

您可以使用字典将URL映射到其响应以及您需要跟踪的任何其他信息。如果URL已经在字典中,那么您就知道了响应。所以你有一本字典:

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

如果你需要以不同的方式组织事情,那么使用另一本字典不应该太难。