因此,我开发了一个脚本,该脚本将从实时更新的站点中提取数据来跟踪冠状病毒数据。我将其设置为每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个条目,依此类推(本质上是形成一个三角形)。
该图像上方将是几百个空行。有人知道这里出了什么问题吗?我认为这是一次失败的尝试,但仍然想从这次尝试中学习。我先感谢您的帮助。
因此,我开发了一个脚本,该脚本将从实时更新的站点中提取数据来跟踪冠状病毒数据。我将其设置为每30分钟提取一次数据,但最近每30秒对更新进行测试。 ...