连续运行Python请求会返回旧的网站数据

时间:2018-06-03 17:49:37

标签: python selenium beautifulsoup python-requests

我试图确定网站何时更新。我通过创建两个变量并在每个变量中请求相同的站点数据来完成此操作。然后在while循环中比较它们,在循环的每次迭代中更新一个变量(参见下面的代码)。随着时间在网站上的变化,网站HTML实际上每分钟都在变化。所以你会期望循环每分钟结束。

不幸的是,该网站似乎为每个附加请求发送相同的原始数据,因此while循环不会退出。为了重现这个问题,请运行下面的代码几次,然后检查HTML中的时间(origsite [4050:4114]),看看它是当前时间还是从你第一次运行的时间开始代码块。

import time
import random
import sys
import requests

site = requests.get("http://www.supremenewyork.com/shop/all/").text
origsite = requests.get("http://www.supremenewyork.com/shop/all/").text

n = 1

while (origsite == site): 
    x = round(random.uniform(0.8,1.2),3)
    time.sleep(x)
    origsite = requests.get("http://www.supremenewyork.com/shop/all/").text
    print(n)
    n = n + 1
print("site changed")

这是请求的已知问题吗?或者网站是否故意发送旧信息?我曾尝试使用VPN来更改我的IP,但仍然会返回旧数据。有没有其他方法来测试网站是否已更改?下面是使用旧数据的示例。 origsite是在运行站点数据之前5分钟存储数据。

origsite[4050:4114]
Out[94]: b'ime data-timezone-offset="3600"><b>04/06/2018 03:11am</b> <span '

site[4050:4114]
Out[95]: b'<b>04/06/2018 03:16am</b> <span id="time-zone-name">LDN</span></'

1 个答案:

答案 0 :(得分:0)

不幸的是,似乎没有Selenium /请求解决方案。我通过分裂器使用浏览器解决了这个问题。调整后的代码如下:

from splinter import Browser
browser = Browser('firefox')
browser.visit(mainUrl + cat)
origsite = browser.html
site = browser.html

n = 1

while (origsite == site): 
    x = round(random.uniform(0.8,1.2),3)
    time.sleep(x)
    origsite = browser.html
    print(n)
    n = n + 1
print("site changed")