Форум программистов, компьютерный форум CyberForum.ru

Python: Web

Войти
Регистрация
Восстановить пароль
 
Shambet
0 / 0 / 0
Регистрация: 19.04.2015
Сообщений: 44
#1

Получение данных о погоде с сайта Яндекс - Python

20.12.2016, 18:43. Просмотров 294. Ответов 4
Метки нет (Все метки)

У меня есть скрипт, который должен получать информацию о погоде с сайта Яндекс погода. Но скрипт почему то получается информации только за 1 день. Проблема в том, что class в коде яндекс погоды одинаковые. Как получить данные о разных днях.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import urllib.request
from bs4 import BeautifulSoup
 
def get_html(url):
    response = urllib.request.urlopen(url)
    return response.read()
 
def parse(html):
    soup = BeautifulSoup(html, "html.parser")
    temp = soup.find('div', class_='current-weather__thermometer current-weather__thermometer_type_now').get_text().encode('utf-8').decode('utf-8', 'ignore')
    return temp
 
def parsing(html):
    soup = BeautifulSoup(html, "html.parser")
    next_temp = soup.find('div', class_='forecast-brief__item-temp-day').get_text().encode('utf-8').decode('utf-8', 'ignore')
    return next_temp
 
def thursday(html):
    soup = BeautifulSoup(html, "html.parser")
    thursday_temp = soup.find('div', class_='forecast-brief__item-temp-day').get_text().encode('utf-8').decode('utf-8', 'ignore')
    return thursday_temp
 
def friday(html):
    soup = BeautifulSoup(html, "html.parser")
    friday_temp = soup.find('div', class_='forecast-brief__item-temp-day').get_text().encode('utf-8').decode('utf-8', 'ignore')
    return friday_temp
 
def saturday(html):
    soup = BeautifulSoup(html, "html.parser")
    saturday_temp = soup.find('div', class_='forecast-brief__item-temp-day').get_text().encode('utf-8').decode('utf-8','ignore')
    return saturday_temp
 
def sunday(html):
    soup = BeautifulSoup(html, "html.parser")
    sunday_temp = soup.find('div', class_='forecast-brief__item-temp-day').get_text().encode('utf-8').decode('utf-8','ignore')
    return sunday_temp
 
def main():
    temp = parse(get_html('https://yandex.ru/pogoda/moscow'))
    print("Текущая температура: ", temp)
    next_temp = parsing(get_html('https://yandex.ru/pogoda/moscow'))
    print("Температура на завтра : ", next_temp)
    thursday_temp = thursday(get_html('https://yandex.ru/pogoda/moscow'))
    print ("Температура на четверг : ", thursday_temp)
    friday_temp = friday(get_html('https://yandex.ru/pogoda/moscow'))
    print("Температура на пятницу : ", friday_temp)
    saturday_temp = saturday(get_html('https://yandex.ru/pogoda/moscow'))
    print("Температура на субботу : ", saturday_temp)
    sunday_temp = sunday(get_html('https://yandex.ru/pogoda/moscow'))
    print("Температура на воскресение : ", sunday_temp)
 
if __name__ == '__main__':
    main()
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2016, 18:43     Получение данных о погоде с сайта Яндекс
Посмотрите здесь:

Django, generic views: получение имени пользователя в шаблоне Python
Азы создания сайта Python
Получение выпадающего списка из значений поля другой модели Python
Python Нужен скрипт для выгрузки прайса товара с Яндекс.Маркет в XML/YML
Получение списка родителей модели Python
Cкачать файл с сайта Python
Python Выбрать технологию для создания сайта для обработки стат.данных
Python Исправить код для парсинга сайта
Как сделать импорт сайта? Python
Python Парсинг защищенного сайта, доступ к cookies
PyQt5. Заполнение веб-форм, получение данных со страницы Python
Парсинг сайта BeautifulSoup Python

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jabbson
Модератор
Эксперт по компьютерным сетям
2987 / 2088 / 396
Регистрация: 03.11.2009
Сообщений: 6,625
Записей в блоге: 3
20.12.2016, 19:12     Получение данных о погоде с сайта Яндекс #2
Прежде чем мы продолжим - почему не через api?
Shambet
0 / 0 / 0
Регистрация: 19.04.2015
Сообщений: 44
20.12.2016, 19:42  [ТС]     Получение данных о погоде с сайта Яндекс #3
Цитата Сообщение от Jabbson Посмотреть сообщение
Прежде чем мы продолжим - почему не через api?
Есть примеры таких приложение написанных через api?
Я просто раньше не работал через api. Или хотя бы ссылки на нормальные статьи

Добавлено через 14 минут
Не подскажите как получить информацию о разных днях?
Jabbson
Модератор
Эксперт по компьютерным сетям
2987 / 2088 / 396
Регистрация: 03.11.2009
Сообщений: 6,625
Записей в блоге: 3
20.12.2016, 20:28     Получение данных о погоде с сайта Яндекс #4
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import requests
from bs4 import BeautifulSoup as bs
 
url = 'https://yandex.ru/pogoda/moscow'
 
page = requests.get(url).content
soup = bs(page, 'lxml')
 
current_weather = soup.find('div', {'class': 'current-weather'})
current_weather_temperature = current_weather.find('div', {'class': 'current-weather__thermometer current-weather__thermometer_type_now'})
current_weather_description = current_weather.find('span', {'class': 'current-weather__comment'})
print('Сейчас\n\t{}, {}\n'.format(current_weather_temperature.text, current_weather_description.text))
 
 
forecast_weather = soup.find('ul', {'class': 'forecast-brief'})
 
for li in forecast_weather.find_all('li', {'class': 'forecast-brief__item day-anchor i-bem'}):
    date, description, night = li.find_all('div', recursive=False)
    description_details, day = description.find_all('div', recursive=False)
 
    print('{} ({})'.format(*map(lambda x: x.text, date.find_all('span'))))
    print('\t{} {} / {}\n'.format(description_details.text, day.text, night.text))
Shambet
0 / 0 / 0
Регистрация: 19.04.2015
Сообщений: 44
22.12.2016, 02:10  [ТС]     Получение данных о погоде с сайта Яндекс #5
Решил эту проблему
Вот код на получение информации о погоде от сайта яндекс погода
Python
1
2
3
4
5
6
7
8
9
10
11
# -*- coding: utf-8 -*- 
import http.client, re, time 
conn = http.client.HTTPSConnection("yandex.ru")
conn.request("GET", "/pogoda/moscow") 
response = conn.getresponse()
str_resp = response.read().decode("utf-8") 
for i in range(1, 9): 
    day1Html = re.search(r'<li class="forecast-brief__item day-anchor i-bem" data-bem="{&quot;day-anchor&quot;:{&quot;anchor&quot;:\d*?,&quot;dayIndex&quot;:'+str(i)+'}}">(.+)<\/li>',str_resp).group(1)
    day1Day = re.search(r'<span class="forecast-brief__item-day-name">(.+?)</span>',day1Html).group(1)
    day1Result = re.search(r'<div class="forecast-brief__item-temp-day" title="Максимальная температура днём">(.+?)<\/div>', day1Html).group(1)
    print(day1Day,day1Result)
Yandex
Объявления
22.12.2016, 02:10     Получение данных о погоде с сайта Яндекс
Ответ Создать тему
Опции темы

Текущее время: 12:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru