使用 Python 中的请求下载不完整

我正在关注一个我们预测空气质量指数的在线项目。为此,我们需要先获取数据,这些数据是从网站下载的。下面是作者提供的源码:


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()

        


但每当我运行此脚本时,只会下载第 12 个月的数据,而不会下载其他月份的其余数据。我使用作者提供的代码进行了检查,它运行良好,尽管我的代码与他的代码完全相同。这真让我抓狂。谁能指出我哪里出错了?


慕少森
浏览 96回答 3
3回答

慕慕森

它不完全一样,有不同的缩进:

肥皂起泡泡

那么,你应该缩进这个:&nbsp; &nbsp; &nbsp; &nbsp; texts=requests.get(url)&nbsp; &nbsp; &nbsp; &nbsp; text_utf=texts.text.encode("utf=8")&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if not os.path.exists("Data/Html_Data/{}".format(year)):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; os.makedirs("Data/Html_Data/{}".format(year))&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; with open("Data/Html_Data/{}/{}.html".format(year,month),"wb") as output:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; output.write(text_utf)

翻过高山走不出你

代码是正确的,只是存在缩进问题。下面的代码应该在for循环的内部texts=requests.get(url)text_utf=texts.text.encode("utf=8")&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;if not os.path.exists("Data/Html_Data/{}".format(year)):&nbsp; &nbsp;os.makedirs("Data/Html_Data/{}".format(year))&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;with open("Data/Html_Data/{}/{}.html".format(year,month),"wb") as output:&nbsp; &nbsp; &nbsp; &nbsp; output.write(text_utf)而下面的代码应该在外层的for循环中sys.stdout.flush()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python