Выполнение запросов Python последовательно возвращает старые данные веб-сайта

Sagg спросил: 10 мая 2018 в 04:09 в: python

Я пытаюсь определить, когда обновляется сайт. Я сделал это, создав две переменные и запросив одни и те же данные сайта в каждом. Затем сравнивая их в цикле while, обновляя одну переменную в каждой итерации цикла (см. Код ниже). Веб-сайт HTML на самом деле меняется каждую минуту, так как время меняется на сайте. Таким образом, вы ожидаете, что цикл закончится каждую минуту.

К сожалению, сайт, похоже, отправляет одни и те же исходные данные для каждого дополнительного запроса, и поэтому цикл while не выходит. Чтобы воспроизвести проблему, запустите код ниже пару раз, а затем проверьте время в HTML (origsite [4050: 4114]), чтобы узнать, является ли это текущее время или время с момента запуска блока кода .

import time
import random
import sys
import requestssite = requests.get("http://www.supremenewyork.com/shop/all/").text
origsite = requests.get("http://www.supremenewyork.com/shop/all/").textn = 1while (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 ответ

Sagg ответил: 24 мая 2018 в 02:45

К сожалению, похоже, не было решения Selenium / requests. Я решил проблему, используя браузер из splinter. Скорректированный код ниже:

from splinter import Browser
browser = Browser('firefox')
browser.visit(mainUrl + cat)
origsite = browser.html
site = browser.htmln = 1while (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")

Дополнительное видео по вопросу: Выполнение запросов Python последовательно возвращает старые данные веб-сайта

BeautifulSoup and Requests in Python: Quickstart and Introduction

Live de Python #20 - Selenium / Web scraping #1

Web scraping and parsing with Beautiful Soup & Python Introduction p.1