Python 如何使用selenium下拉菜单来获取历史数据?

Python 如何使用selenium下拉菜单来获取历史数据?,python,selenium,Python,Selenium,我试图从以下URL中获取历史和预测的每小时能源价格: 我可以这样做的另一个表在这里,这是明天的预测价格 …到目前为止,处理下拉列表有点让我不知所措 我不完全明白如何用一个日期选择器来完成这件事。我想做的是收集2018年全年的数据。 当我使用Selenium IDE记录要执行的步骤时 在记录模式下根本不增加年份,但在不记录的情况下更改日期时效果良好?任何关于如何解决这个问题的建议都将不胜感激。据我目前所知,我应该能够在IDE中记录命令,然后用python编写相同的代码 从pandas.io.htm

我试图从以下URL中获取历史和预测的每小时能源价格:

我可以这样做的另一个表在这里,这是明天的预测价格

…到目前为止,处理下拉列表有点让我不知所措

我不完全明白如何用一个日期选择器来完成这件事。我想做的是收集2018年全年的数据。 当我使用Selenium IDE记录要执行的步骤时 在记录模式下根本不增加年份,但在不记录的情况下更改日期时效果良好?任何关于如何解决这个问题的建议都将不胜感激。据我目前所知,我应该能够在IDE中记录命令,然后用python编写相同的代码

从pandas.io.html导入读取\u html
从selenium导入webdriver
从运算符导入itemgetter
#driver=webdriver.Firefox()
从bs4导入BeautifulSoup
options=webdriver.ChromeOptions()
选项。添加参数(“无头”)
driver=webdriver.Chrome(Chrome\u options=options)
司机,上车https://hourlypricing.comed.com/pricing-table-tomorrow/')
表=驱动程序。按类名称(“价格”)查找元素
tablehtml=table.get_属性('outerHTML')
soup=BeautifulSoup(表格html,'xml')
table=soup.find(“table”,{“class”:“prices”})
#打印(表格)
table_body=table.find('tbody'))
#打印(表体)
数据=[]
行=表体。查找所有('tr')
对于行中的行:
cols=行。查找所有('td'))
cols=[ele.text.strip()表示cols中的ele]
美分=科尔斯[1]
美分=美分[:-1]
科尔斯[1]=美分
data.append([ele表示列中的ele,如果ele])
sortedData=sorted(数据,键=itemgetter(1))
pprint(分类数据)
驱动程序关闭()

而不必查看日历并选择每一天,因为这将是一个漫长的日子。相反,您可以直接转到信息源,将fetch()的输出解析为beautiful soup,然后检索您想要的所有信息:)

我们要计算出一个月有多少天,将该列表传递到一个GET请求中,以检索该天。所有这些都在12个月的周期内。如果需要,您可以将其调整到许多以前的年份

import requests
import calendar

def getDays(counter):

  b = calendar.monthcalendar(2018, counter)

  length = len(b)
  lengthCounter = 0
  days = []
  for x in b:
    lists = (b[lengthCounter])
    lengthCounter += 1
    for day in lists:
      if day > 0:
        days.append(day)
    else:
      pass
  return(days)

def fetch(days, month):
  if month < 10:
    month = "0" + str(month)

  for d in days:
    if d < 10:
        mod = "0" + str(d)
        re = requests.get("https://hourlypricing.comed.com/rrtp/ServletFeed?type=pricingtabledual&date=2018" + str(month) + str(mod))
        source = re.content
        print(source)
    else:
      re = requests.get("https://hourlypricing.comed.com/rrtp/ServletFeed?type=pricingtabledual&date=2018" + str(month) + str(d))
      source = re.content
      print(source)




months = 1
while months < 12:

    dayList = getDays(months)
    print(fetch(dayList, months))
    months +=1
导入请求
导入日历
def getDays(计数器):
b=日历月数(2018年,计数器)
长度=长度(b)
长度计数器=0
天数=[]
对于b中的x:
列表=(b[长度计数器])
长度计数器+=1
对于列表中的日期:
如果日期>0:
天。附加(天)
其他:
通过
返回(天)
def提取(天、月):
如果月份<10:
月=“0”+str(月)
对于d(以天为单位):
如果d<10:
mod=“0”+str(d)
re=请求。获取(“https://hourlypricing.comed.com/rrtp/ServletFeed?type=pricingtabledual&date=2018“+str(月)+str(月))
来源=关于内容
打印(来源)
其他:
re=请求。获取(“https://hourlypricing.comed.com/rrtp/ServletFeed?type=pricingtabledual&date=2018“+str(月)+str(d))
来源=关于内容
打印(来源)
月=1
而<12个月:
dayList=getDays(月)
打印(获取(日列表,月))
月份+=1

历史价格信息有免费API。它允许您指定要为其检索值的范围。 这是5分钟的价格,但有多种查询选项和不同的返回格式

GET请求返回json的数据范围格式示例

提供的日期格式为:yyyyMMddhhmm

API信息在此


JSON:返回包含元素UTC millis和 价格


虽然它提供了历史价格,但没有提供给定日期的前一天小时价格。不。但是,它可能对其他正在研究类似问题的人有用。回顾性地看一天有多有用?我不知道这些数据,当然。希望能够实际回答这个问题,并在此过程中学习。
[
{"millisUTC":"1434686700000","price":"2.0"},
{"millisUTC":"1434686100000″,"price”:"2.5"},
{"millisUTC":"1434685800000″,"price”:"2.5"}
]