Неполная загрузка с использованием запросов в Python - PullRequest
0 голосов
/ 14 июля 2020

Я слежу за онлайн-проектом, где мы прогнозируем индекс качества воздуха. Для этого нам нужно сначала получить данные, которые мы загружаем с веб-сайта. Вот исходный код, предоставленный автором:

import os
import time
import requests
import sys

def retrieve_html():
    for year in range(2013,2019):
        for month in range(1,13):
            if(month<10):
                url='http://en.tutiempo.net/climate/0{}-{}/ws-421820.html'.format(month
                                                                          ,year)
            else:
                url='http://en.tutiempo.net/climate/{}-{}/ws-421820.html'.format(month
                                                                          ,year)
            texts=requests.get(url)
            text_utf=texts.text.encode('utf=8')
            
            if not os.path.exists("Data/Html_Data/{}".format(year)):
                os.makedirs("Data/Html_Data/{}".format(year))
            with open("Data/Html_Data/{}/{}.html".format(year,month),"wb") as output:
                output.write(text_utf)
            
        sys.stdout.flush()
        
if __name__=="__main__":
    start_time=time.time()
    retrieve_html()
    stop_time=time.time()
    print("Time taken {}".format(stop_time-start_time))

Это отлично работает. Теперь я попробовал написать тот же код самостоятельно. Вот мой код:

import os
import time
import requests
import sys


def retrieve_html():
    for year in range(2013,2019):
        for month in range(1,13):
            if(month<10):
                url='http://en.tutiempo.net/climate/0{}-{}/ws-421820.html'.format(month, year)
            else:
                url='http://en.tutiempo.net/climate/{}-{}/ws-421820.html'.format(month, year)
        
        texts=requests.get(url)
        text_utf=texts.text.encode("utf=8")
        
        if not os.path.exists("Data/Html_Data/{}".format(year)):
            os.makedirs("Data/Html_Data/{}".format(year))
        
        with open("Data/Html_Data/{}/{}.html".format(year,month),"wb") as output:
            output.write(text_utf)
            
    sys.stdout.flush()
        
if __name__=="__main__":
    start_time=time.time()
    retrieve_html()
    stop_time=time.time()
    print("Time taken: {}".format(stop_time-start_time))

Но всякий раз, когда я запускаю этот скрипт, загружаются только данные за 12-й месяц, а остальные данные за другие месяцы не загружаются. Я проверил, используя код, предоставленный автором, и он работает отлично, хотя мой код точно такой же, как и его. Это сводит меня с ума. Кто-нибудь может указать, где я ошибаюсь?

Ответы [ 3 ]

1 голос
/ 14 июля 2020

Ну, вы должны сделать отступ:

        texts=requests.get(url)
        text_utf=texts.text.encode("utf=8")
        
        if not os.path.exists("Data/Html_Data/{}".format(year)):
            os.makedirs("Data/Html_Data/{}".format(year))
        
        with open("Data/Html_Data/{}/{}.html".format(year,month),"wb") as output:
            output.write(text_utf)
1 голос
/ 14 июля 2020

Код правильный, только есть проблема с отступом. Следующий код должен быть во внутреннем для l oop

texts=requests.get(url)
text_utf=texts.text.encode("utf=8")
        
if not os.path.exists("Data/Html_Data/{}".format(year)):
   os.makedirs("Data/Html_Data/{}".format(year))
        
   with open("Data/Html_Data/{}/{}.html".format(year,month),"wb") as output:
        output.write(text_utf)

И следующий код должен быть во внешнем для l oop

sys.stdout.flush()
1 голос
/ 14 июля 2020

Не совсем то же самое, есть разные отступы:

введите описание изображения здесь

...