парсинг данных с windguru

Доброго времени суток, коллеги, Пытаюсь с популярного сайта "вытянуть" скорость ветра через хтмл парсер. По факту, используя код ниже, получают ответ, в котором отсутствует элемент внутри тега span. Другими словами: нечего спарсить. Не могу понять в чём проблема. Прошу помощи. Заранее благодарю.

"span class="wgs_wind_avg_value"></span"

import requests # Модуль для обработки URL
from bs4 import BeautifulSoup # Модуль для работы с HTML

try:
WIND = 'https://www.windguru.cz/station/3303'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36'}


full_page = requests.get(WIND, headers=headers)
soup_eur = BeautifulSoup(full_page.content, 'html.parser')

wind_speed = soup_eur.findAll("span", {"class": "wgs_wind_avg_value"})


print(wind_speed)

except:
print("ошибка")

Ответы (1 шт):

Автор решения: Mikhail S

Если вы проинспектируете контент, который загружается при открытии страницы этого сайта, то сможете найти там нужные данные: https://gyazo.com/8af3a00a7ffc4e7cf2cfda393d6d1af5 https://gyazo.com/7b8c3454e4d3f94c523bfbe740b70616

Я взял первый попавшийся запрос, скопировал cURL и переписал в request:

import requests

headers = {
    'authority': 'www.windguru.net',
    'accept': '*/*',
    'accept-language': 'en-US,en;q=0.9,ru-RU;q=0.8,ru;q=0.7',
    'cache-control': 'no-cache',
    'origin': 'https://www.windguru.cz',
    'pragma': 'no-cache',
    'referer': 'https://www.windguru.cz/',
    'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="101", "Google Chrome";v="101"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'cross-site',
}

params = {
    'q': 'station',
    'id_station': '3303',
    'weather': 'false',
}

response = requests.get('https://www.windguru.net/int/iapi.php', params=params, headers=headers)
print(response.json())
{'id_station': 3303,
 'id_type': 17,
 'wg': False,
 'id_spot': 1103023,
 'spotname': 'Duny, St.Petersburg',
 'name': 'TakeOff (NEW)',
 'lat': 60.130498,
 'lon': 29.938017,
 'alt': 10,
 'install_height': 10,
 'timezone': 'Europe/Moscow',
 'tzoffset': 10800,
 'owner': '',
 'url': '',
 'description': '',
 'logo': 'img1_6258_1_1652212403.jpg',
 'weather': {'wind_avg': 14.36,
  'wind_max': 15.91,
  'wind_min': 12.81,
  'wind_direction': 261.5625,
  'temperature': 14.5,
  'mslp': 767.812,
  'rh': None,
  'datetime': '2022-06-03 12:05:30 MSK',
  'unixtime': 1654247130},
 'favourite': False}

А распарсить такой JSON намного легче, чем HTML.

→ Ссылка