我使用python请求模块从一个网站获取数据。 第一次运行脚本时,一切正常,数据正常。然后,如果再次运行脚本,它将返回相同的数据,但是如果在浏览器中打开,则该数据会在网站上更改。每当我运行脚本时,数据仍然相同。但! 5或6分钟后,如果再次运行脚本,则数据已更新。看起来像请求缓存信息。 如果使用浏览器,则每次刷新时,数据都会正确更新。
r = requests.get('https://verysecretwebsite.com', headers=headers)
r.text
实际上我使用以下标头:
headers = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 YaBrowser/19.6.1.153 Yowser/2.5 Safari/537.36",
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate, br',
'Referer': 'https://www.gismeteo.ru/weather-orenburg-5159/now/',
'DNT': '1',
'Connection': 'false',
'Upgrade-Insecure-Requests': '1',
'Cache-Control': 'no-cache, max-age=0',
'TE': 'Trailers'}
但是没有运气。 我尝试使用“ data-dateformat =“ G:i”
部分来搜索此链接https://www.gismeteo.ru/weather-orenburg-5159/now/答案 0 :(得分:1)
在您的代码中,您没有设置任何标题。这意味着requests
将始终发送其默认User-Agent
标头,例如User-Agent: python-requests/2.22.0
,并且不使用任何缓存指令,例如Cache-Control
。
您网站的远程服务器可能对客户端应用程序具有不同的缓存策略。远程服务器可以根据请求的User-Agent
和/或Cache-Control
标头来响应不同的数据或使用不同的缓存时间。
因此,请尝试检查您的浏览器使用了哪些标头(Chrome中的 F12 )向您的网站提出请求,然后将其添加到您的请求中。您还可以添加Cache-Control
指令以强制服务器返回最新数据。
示例:
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 YaBrowser/19.6.1.153 Yowser/2.5 Safari/537.36",
"Cache-Control": "no-cache, max-age=0", # disable caching
}
r = requests.get("https://www.mysecretURL.com", headers=headers)
答案 1 :(得分:0)
requests.get()方法默认情况下不缓存数据(来自this StackOverflow post),我不确定延迟的原因,因为刷新浏览器本质上与调用request.get相同。 ()。您可以尝试创建一个循环,该循环每5-10秒钟左右自动收集一次数据,并且该循环应该可以正常工作(并使您不必手动运行相同的代码行)。希望这会有所帮助!