Python请求模块缓存网站?

时间:2015-08-26 20:03:58

标签: python python-3.x python-requests

当我向网站请求python模块请求时,我没有获得一个最新的网页,但是一个缓存的网站。

据我所知,应该没有缓存请求或我错了吗?

finanzennet_request = requests.get('http://finanzen.net/aktien/Tesla-Aktie')
print(finanzennet_request)

产生以下结果

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!-- CacheEngine generated: 87039 chars in 0,0313 seconds on 26.08.2015 21:39:07 from NT -->

正如你所看到的那样&#34; CacheEngine生成....&#34; 。 真的可能是网络服务器认识到我的脚本不是真正的用户,因此只给我一个缓存版本吗? 如果是这样我怎么能避免呢?

2 个答案:

答案 0 :(得分:1)

在对请求网页中与脚本相关的行为进行故障排除时,请先检查浏览器,然后再假定用户代理或标题之类的内容导致远程Web服务器的响应不同。

您指定的网址会返回&#39; CacheEngine&#39;在Chrome,Safari和Firefox中为我排队。

当您遇到实际响应不同内容请求的网页时,我建议您首先考虑设置User-Agent field。虽然您可以通过指定:

来请求远程而不缓存内容

{'cache-control': ' private, max-age=0, no-cache'}

标题中的

,请记住,这只是远程网络服务器的请求,不能为您提供缓存内容。

对于假装是要求非缓存内容的浏览器的总请求,这将是这样的:

url='http://finanzen.net/aktien/Tesla-Aktie'
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36',
    'cache-control': 'private, max-age=0, no-cache'
}
response = requests.get(url, headers=headers)

答案 1 :(得分:1)

将近两年后,经过我的stackoverlow问题,我找到了问题。

我当时没有看到它,但是如果您打开我之前发布的Comparison Requests vs Chrome作为对用户559633的评论,您可以看到这两个实际上是不同的域。使用chrome我正在访问 finanzen.at 并且请求 finanzen.net

故事很长:在我的网站上出现了错误,并没有要求缓存网站或网络服务器根据用户检测来改变响应。