Найти - Пользователи
Полная версия: При парсинге сайта погоды получаю совсем не те данные, которые отображаются браузере
Начало » Центр помощи » При парсинге сайта погоды получаю совсем не те данные, которые отображаются браузере
1
vladimir_vl_vlad
Скажем, в браузере: время 7:57 температура +5° ветер 7 м/с влажность 28%
При парсинге получаю: время 0:57 температура +11° ветер 0 м/с влажность 45%

Причем, иногда парсинг выдает правильный результат, т.е. такой же как в браузере

В чем причина, поясните плз.
Мой код:
 url = 'https://www.meteoservice.ru/weather/now/vladivostok'
response = requests.get(url)
html_dock = BeautifulSoup(response.text, features='html.parser')
list_of_values = html_dock.find_all('div', {'class': 'small-12 medium-6 large-5 columns current-weather'})
date_time = list_of_values[0].find_all('span', {'class': 'point-time'})[0]
temperature = list_of_values[0].find_all('span', {'class': 'value'})[0]
wind = list_of_values[0].find_all('span', {'class': 'value'})[2]
air_humidity = list_of_values[0].find_all('div', {'class': 'h5 margin-bottom-0'})[1]
precipitation = list_of_values[0].find_all('div', {'class': 'small-12 columns text-center padding-top-2'})[0]
print(date_time.text, temperature.text, wind.text, air_humidity.text, precipitation.text)
py.user.next
Всё работает нормально.

vladimir_vl_vlad
В чем причина, поясните плз.
Запускаешь не этот код.

Запусти в консоли, а не в IDE.
vladimir_vl_vlad
py.user.next
Всё работает нормально.
Если через консоль - тоже самое: иногда правильно, иногда вообще непонятно откуда цифры берутся.
py.user.next
vladimir_vl_vlad
Если через консоль - тоже самое
Сделай скриншот консоли, в которой запускаешь, и выложи сюда.

Вот я делаю, он только показывает время последних измерений (часы и минуты не совпадают)
  
>>> import requests
>>> from bs4 import BeautifulSoup
>>> 
>>> def f():
...     url = 'https://www.meteoservice.ru/weather/now/vladivostok'
...     response = requests.get(url)
...     html_dock = BeautifulSoup(response.text, features='html.parser')
...     list_of_values = html_dock.find_all('div', {'class': 'small-12 medium-6 large-5 columns current-weather'})
...     date_time = list_of_values[0].find_all('span', {'class': 'point-time'})[0]
...     temperature = list_of_values[0].find_all('span', {'class': 'value'})[0]
...     wind = list_of_values[0].find_all('span', {'class': 'value'})[2]
...     air_humidity = list_of_values[0].find_all('div', {'class': 'h5 margin-bottom-0'})[1]
...     precipitation = list_of_values[0].find_all('div', {'class': 'small-12 columns text-center padding-top-2'})[0]
...     print(date_time.text, temperature.text, wind.text, air_humidity.text, precipitation.text)
... 
>>> for i in range(5):
...     f()
... 
23 апреля, 13:47 +17° 1 м/с 28% 
Малооблачно
 
23 апреля, 13:47 +17° 1 м/с 28% 
Малооблачно
 
23 апреля, 13:47 +17° 1 м/с 28% 
Малооблачно
 
23 апреля, 13:47 +17° 1 м/с 28% 
Малооблачно
 
23 апреля, 13:47 +17° 1 м/с 28% 
Малооблачно
 
>>>

vladimir_vl_vlad
Скажем, в браузере: время 7:57 температура +5° ветер 7 м/с влажность 28%
При парсинге получаю: время 0:57 температура +11° ветер 0 м/с влажность 45%
Почисти кэш браузера ещё.
vladimir_vl_vlad
Вот скриншот: видно, что, начиная с 8-го вызова функции, данные изменяются и начинают совпадать с теми, что отображаются в браузере
Ссылка на скриншот
py.user.next
У меня вот оно показывает время неправильно (часы неправильные, а потом и минуты неправильными становятся)
  
>>> import requests
>>> from bs4 import BeautifulSoup
>>> import time
>>> 
>>> def f():
...     url = 'https://www.meteoservice.ru/weather/now/vladivostok'
...     response = requests.get(url)
...     html_dock = BeautifulSoup(response.text, features='html.parser')
...     list_of_values = html_dock.find_all('div', {'class': 'small-12 medium-6 large-5 columns current-weather'})
...     date_time = list_of_values[0].find_all('span', {'class': 'point-time'})[0]
...     temperature = list_of_values[0].find_all('span', {'class': 'value'})[0]
...     wind = list_of_values[0].find_all('span', {'class': 'value'})[2]
...     air_humidity = list_of_values[0].find_all('div', {'class': 'h5 margin-bottom-0'})[1]
...     precipitation = list_of_values[0].find_all('div', {'class': 'small-12 columns text-center padding-top-2'})[0]
...     print(date_time.text, temperature.text, wind.text, air_humidity.text, precipitation.text)
... 
>>> for i in range(20):
...     f()
...     time.sleep(10)
... 
24 апреля, 8:48 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:48 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:48 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:48 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:48 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:48 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:48 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:48 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:48 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:48 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:48 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:48 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:48 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:48 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:48 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:48 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:48 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:48 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:53 +11° 1 м/с 51% 
Ясно
 
24 апреля, 8:53 +11° 1 м/с 51% 
Ясно
 
>>>

Так что забей на этот сайт. Там какая-то муть просто отображается. Найди другой сайт.

Я думал, у тебя просто там что-то с Интернетом, бывает такое, что “умные” провайдеры начинают кешировать страницы для экономии чего-то и в итоге чушь всякая показывается устаревшая, хотя ты запрашивал всё правильно. Но это не тот случай, тут сам сайт гонит.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB