Python:Web抓取后快速读取和写入excel文件的问题?工作片刻,然后出现奇怪的问题

问题描述 投票:2回答:2

因此,我开发了一个脚本,该脚本将从实时更新的站点中提取数据来跟踪冠状病毒数据。我将其设置为每30分钟提取一次数据,但最近每30秒对更新进行测试。

想法是,它创建对站点的请求,提取html,创建我需要的所有数据的列表,然后重组为数据框(基本上是国家,案件,死亡等)。] >

然后,将采用每一行并将其追加到适用于各个国家的123个excel文件的每个行中。我认为,这将在30-50次迭代的范围内很好地起作用,然后再导致文件损坏或怪异的数据输入。

我下面有我的代码。我知道它写得不好(我最初的理由是我确信我可以快速设置它,并且我想快速收集数据。.不幸的是,我高估了我的能力,但现在我想学习出了什么问题)。在我的代码下方,我将包括示例输出。

请注意,这30秒的间隔代码拉动仅用于快速测试。我通常几个月都不会发送这么多请求。我只是想看看问题是什么。最初,当我检测到此问题时,它设置为每30分钟拉一次。

请参见下面的代码:

import schedule
import time

def RecurringProcess2():
    import requests
    from bs4 import BeautifulSoup
    import pandas as pd
    import datetime
    import numpy as np
    from os import listdir
    import os

    try:
        extractTime = datetime.datetime.now()
        extractTime = str(extractTime)
        print("Access Initiated at " + extractTime)
        link = 'https://www.worldometers.info/coronavirus/'
        response = requests.get(link)
        soup = BeautifulSoup(response.text,'html.parser').findAll('td')#[1107].get_text()

        table = pd.DataFrame(columns=['Date and Time','Country','Total Cases','New Cases','Total Deaths','New Deaths','Total Recovered','Active Cases','Serious Critical','Total Cases/1M pop'])
        soupList = []

        for i in range(1107):
            value = soup[i].get_text()
            soupList.insert(i,value)

        table = np.reshape(soupList,(123,-1))
        table = pd.DataFrame(table)
        table.columns=['Country','Total Cases','New Cases (+)','Total Deaths','New Deaths (+)','Total Recovered','Active Cases','Serious Critical','Total Cases/1M pop']
        table['Date & Time'] = extractTime

        #Below code is run once to generate the initial files. That's it.
        # for i in range(122):
        #     fileName = table.iloc[i,0] + '.xlsx'
        #     table.iloc[i:i+1,:].to_excel(fileName)

        FilesDirectory = 'D:\\Professional\\Coronavirus'
        fileType = '.csv'
        filenames = listdir(FilesDirectory)
        DataFiles = [ filename for filename in filenames if filename.endswith(fileType) ]

        for file in DataFiles:
            countryData = pd.read_csv(file,index_col=0)
            MatchedCountry = table.loc[table['Country'] == str(file)[:-4]]
            if file == ' USA .csv':
                print("Country Data Rows: ",len(countryData))
                if os.stat(file).st_size < 1500:
                    print("File Size under 1500")
            countryData = countryData.append(MatchedCountry)
            countryData.to_csv(FilesDirectory+'\\'+file, index=False)

    except :
        pass

    print("Process Complete!")

    return

schedule.every(30).seconds.do(RecurringProcess2)

while True:
    schedule.run_pending()
    time.sleep(1)

[当我经过几次迭代后检查代码时(通常成功执行30-50次),它要么仅显示2行,而丢失所有其他行,要么在删除上面一行中的单个条目的同时继续添加,而上面的两行会丢失2个条目,依此类推(本质上是形成一个三角形)。

Image of what data on USA looks like

该图像上方将是几百个空行。有人知道这里出了什么问题吗?我认为这是一次失败的尝试,但仍然想从这次尝试中学习。我先感谢您的帮助。

因此,我开发了一个脚本,该脚本将从实时更新的站点中提取数据来跟踪冠状病毒数据。我将其设置为每30分钟提取一次数据,但最近每30秒对更新进行测试。 ...

python web-scraping
2个回答
0
投票

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.