Проблема нуля в дате

Iceforest

Новичок
Пользователь
Дек 14, 2020
6
1
1
пишу парсер по сайту, получился вот такой код
хотел бы уйти от проверки day в цикле. Если ставить такую проверку перед циклом, то идет проблема ведущего нуля, он не подставляется в ссылку для парсинга.

Python:
from bs4 import BeautifulSoup
import requests

url = 'https://sinoptik.com.ru/погода-санкт-петербург/'


class GetForecast:

    def get_html(self, url):
        headers = {'user-agent': 'Mozilla/5.0'}
        response = requests.get(url, headers=headers)
        html = response.text
        return html

    def get_weather(self, html):
        forecast_in_range = []
        soup = BeautifulSoup(html, 'html.parser')
        temperature = soup.find('b').get_text(strip=True)
        day = soup.find('p', class_='weather__content_tab-day').get_text(strip=True)
        date = soup.find('p', class_='weather__content_tab-date day_red').get_text(strip=True)
        month = soup.find('p', class_='weather__content_tab-month').get_text(strip=True)
        weather = soup.find('label', class_='show-tooltip').get_text(strip=True)
        print(f'{day} {date} {month} {temperature} {weather}')
        forecast_in_range.append(
            {'temperature': temperature, 'date': date, 'month': month, 'day': day, 'weather': weather})
        return forecast_in_range

    def parse(self):
        forecast_in_range = []
        day_from = input('Введите день c которого вывести прогноз погоды:')
        day_to = input('Введите день до которого вывести прогноз погоды:')
        month = input('Введите месяц в котором вывести прогноз погоды:')
        year = input('Введите год в котором вывести прогноз погоды:')
        year = int(year.strip())
        day_from=int(day_from.strip())
        month= int(month.strip())
        day_to=int(day_to.strip())
        if month >= 10:
            month = month
        else:
            month = '0' + str(month)
        print(month)
        print(year)
        print(day_to)
        print(day_from)
        for day in range(day_from, day_to):
            if day >= 10:
                html = self.get_html(url + f'{year}-{month}-{day}')
                forecast_in_range.extend(self.get_weather(html))

            else:
                html = self.get_html(url + f'{year}-{month}-0{day}')
                forecast_in_range.extend(self.get_weather(html))

        return forecast_in_range


forecast = GetForecast()
forecast_in_range = forecast.parse()
print(forecast_in_range)
 

Iceforest

Новичок
Пользователь
Дек 14, 2020
6
1
1
пишу парсер по сайту, получился вот такой код
хотел бы уйти от проверки day в цикле. Если ставить такую проверку перед циклом, то идет проблема ведущего нуля, он не подставляется в ссылку для парсинга.

Python:
from bs4 import BeautifulSoup
import requests

url = 'https://sinoptik.com.ru/погода-санкт-петербург/'


class GetForecast:

    def get_html(self, url):
        headers = {'user-agent': 'Mozilla/5.0'}
        response = requests.get(url, headers=headers)
        html = response.text
        return html

    def get_weather(self, html):
        forecast_in_range = []
        soup = BeautifulSoup(html, 'html.parser')
        temperature = soup.find('b').get_text(strip=True)
        day = soup.find('p', class_='weather__content_tab-day').get_text(strip=True)
        date = soup.find('p', class_='weather__content_tab-date day_red').get_text(strip=True)
        month = soup.find('p', class_='weather__content_tab-month').get_text(strip=True)
        weather = soup.find('label', class_='show-tooltip').get_text(strip=True)
        print(f'{day} {date} {month} {temperature} {weather}')
        forecast_in_range.append(
            {'temperature': temperature, 'date': date, 'month': month, 'day': day, 'weather': weather})
        return forecast_in_range

    def parse(self):
        forecast_in_range = []
        day_from = input('Введите день c которого вывести прогноз погоды:')
        day_to = input('Введите день до которого вывести прогноз погоды:')
        month = input('Введите месяц в котором вывести прогноз погоды:')
        year = input('Введите год в котором вывести прогноз погоды:')
        year = int(year.strip())
        day_from=int(day_from.strip())
        month= int(month.strip())
        day_to=int(day_to.strip())
        if month >= 10:
            month = month
        else:
            month = '0' + str(month)
        print(month)
        print(year)
        print(day_to)
        print(day_from)
        for day in range(day_from, day_to):
            if day >= 10:
                html = self.get_html(url + f'{year}-{month}-{day}')
                forecast_in_range.extend(self.get_weather(html))

            else:
                html = self.get_html(url + f'{year}-{month}-0{day}')
                forecast_in_range.extend(self.get_weather(html))

        return forecast_in_range


forecast = GetForecast()
forecast_in_range = forecast.parse()
print(forecast_in_range)
нашел решение
Python:
    def parse(self):
        forecast_in_range = []
        day_from = input('Введите день c которого вывести прогноз погоды:')
        day_to = input('Введите день до которого вывести прогноз погоды:')
        month = input('Введите месяц в котором вывести прогноз погоды:')
        year = input('Введите год в котором вывести прогноз погоды:')
        year = int(year.strip())
        day_from=int(day_from.strip())
        month= int(month.strip())
        day_to=int(day_to.strip())
        for day in range(day_from, day_to):
            result_date = dt.date(int(year),int(month),int(day))
            html = self.get_html(url + f'{result_date}')
            forecast_in_range.extend(self.get_weather(html))

        return forecast_in_range
 
  • Мне нравится
Реакции: Domohod45

Форум IT Специалистов