python - Python:将值从更新的值附加到现有电子表格
问题描述
现在什么工作
在下面的代码中,前 100 行从网站下载到 Futures.xlsx。
该网站每 15 分钟更新一次,刷新新价值,就像公司股票一样。总行数为 100。
如何修改我的代码,例如每次网站更新或通过某个计数器继续向 Futures.xlsx 文件添加 100 个更新值。所以我会说一个多小时会有 400 行。
我已经包含了代码输出的前四行。
输出
Contracts Markets Open High Low Last Pct Time
0 Oct 2018 (E) NG.F27.E 2.777 2.785 2.774 2.782 +0.36% 20:00
1 Nov 2018 (E) NG.F27.E 2.793 2.800 2.792 2.800 +0.32% 19:51
2 Dec 2018 (E) NG.F27.E 2.887 2.893 2.886 2.891 +0.21% 19:52
3 Jan 2019 (E) NG.F27.E 2.977 2.984 2.975 2.980 +0.20% 19:52
代码
urllib.request import urlopen
from bs4 import BeautifulSoup
import requests
import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
import os
url = "https://quotes.ino.com/exchanges/contracts.html?r=NYMEX_NG"
res = requests.get(url)
soup = BeautifulSoup(res.text, 'lxml')
Markets = []
Contracts =[]
Opens =[]
Highs =[]
Lows =[]
Lasts=[]
Changes=[]
Pcts=[]
data_rows = soup.findAll('tr')[3:]
for td in data_rows[:100]:
Market = td.findAll ('td')[0].text
Markets.append(Market)
Contract = td.findAll('td')[1].text
Contracts.append(Contract)
Open = td.findAll('td')[2].text
Opens.append(Open)
High = td.findAll('td')[3].text
Highs.append(High)
Low = td.findAll('td')[4].text
Lows.append(Low)
Last = td.findAll('td')[5].text
Lasts.append(Last)
Change = td.findAll('td')[6].text
Changes.append(Change)
Pct = td.findAll('td')[7].text
Pcts.append(Pct)
Time = td.findAll('td')[8].text
df = pd.DataFrame({'Contracts' :Contracts, Markets':Market,'Open':Opens,
'High':Highs, 'Low':Lows,'Last':Lasts,'Pct':Pcts})
out_path = "C:\Sid\Futures.xls"
writer = pd.ExcelWriter(out_path , engine='xlsxwriter')
df.to_excel(writer,'Sheet2',index=False)
writer.save()
解决方案
我建议使用 time.sleep 方法为每 15 分钟设置一个计时器。你可以设置一个小功能来为你刷新程序,我在下面做了。
def RefreshProgram(Program, timespan):
while Program.isRunning:
program.refresh()
sleep(900)
下面将介绍如何保存 Excel 数据。datalist
将是从您的网页中获取的一行数据。
logbook=pxl.load_workbook(file_location_goes_here, data_only=False)
emptylist=['','','','','','']
ash=logbook["name_of_sheet_goes_here"]
datalist=[data_from_webpage]
#defining row, column, and checking cell data
rowx = 1
colx = 1
cellcontent = ash.cell(row=rowx, column=colx).value
#finding first empty row
while cellcontent != None:
rowx += 1
cellcontent= ash.cell(row=rowx, column=colx).value
for data in datalist:
ash.cell(row=rowx, column=colx).value = data
colval += 1
logbook.save(filelocation)
推荐阅读
- javascript - 状态更改后 Ant 设计折叠面板保持打开状态
- javascript - 从 JS 创建 word 文档
- javascript - 将数组添加到对象数组 JavaScript
- r - 如何计算R中质谱数据集中每种蛋白质的中值肽强度
- python - 如何每行漂亮地打印多个字典条目?
- javascript - 如何在 API Gateway 中部署单个资源/方法?
- c++builder - 当 TField::Validating 属性为 true 时无法分配
- python - Web Scraping w/ Selenium & BS4 - 不从我想要的所有 URL 中抓取
- python-3.x - 烧瓶尾随/导致内部服务器错误
- yaml - elastic.io ELK 堆栈,在 Apple 笔记本电脑上配置文件节拍