Как очистить исторические данные с помощью selenium с выпадающими списками?

#python #selenium

#python #selenium

Вопрос:

Я пытаюсь очистить исторические и прогнозируемые почасовые цены на энергию по следующему URL: https://hourlypricing.comed.com/pricing-table-today /

Я смог сделать это для другой таблицы здесь, которая является прогнозируемыми ценами на завтра https://hourlypricing.comed.com/pricing-table-tomorrow /

… работа с выпадающим списком пока немного выше моей головы.

Я не совсем понимаю, как это можно сделать с помощью средства выбора даты. Что я хотел бы сделать, так это извлечь данные за весь 2018 год. Когда я использую Selenium IDE для записи того, какие шаги нужно предпринять, он вообще не увеличивает год в режиме записи, но отлично работает, когда я меняю дату без записи? Любые указания относительно того, как подойти к этой проблеме, будут оценены. Насколько я понимаю, я должен иметь возможность записывать команды в IDE, а затем писать тот же код на python?

 from pandas.io.html import read_html
from selenium import webdriver
from operator import itemgetter
#driver = webdriver.Firefox()
from bs4 import BeautifulSoup

options = webdriver.ChromeOptions()
options.add_argument('headless')

driver = webdriver.Chrome(chrome_options=options)

driver.get('https://hourlypricing.comed.com/pricing-table-tomorrow/')

table = driver.find_element_by_class_name('prices')
tablehtml = table.get_attribute('outerHTML')
soup = BeautifulSoup(tablehtml,'xml')
table = soup.find("table", { "class" : "prices" })
#print(table)
table_body = table.find('tbody')
#print(table_body)

data = []
rows = table_body.find_all('tr')
for row in rows:
    cols = row.find_all('td')
    cols = [ele.text.strip() for ele in cols]
    cents = cols[1]
    cents = cents[:-1]
    cols[1] = cents
    data.append([ele for ele in cols if ele])

sortedData = sorted(data, key=itemgetter(1))


pprint(sortedData)

driver.close()
  

Ответ №1:

Вместо того, чтобы просматривать календарь и выбирать каждый день, как это было бы долгое время. Вместо этого вы могли бы перейти прямо к источнику информации, проанализировать вывод 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=pricingtabledualamp;date=2018"   str(month)   str(mod))
        source = re.content
        print(source)
    else:
      re = requests.get("https://hourlypricing.comed.com/rrtp/ServletFeed?type=pricingtabledualamp;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
  

Ответ №2:

Существуют бесплатные API для исторической информации о ценах. Это позволяет вам указывать диапазоны для извлечения значений. Это 5-минутные цены, но есть множество вариантов запросов и различных форматов возврата

Пример формата диапазона данных для запроса GET, возвращающего json

https://hourlypricing.comed.com/api?type=5minutefeedamp;datestart=201712310000amp;dateend=201812310000

Предоставленные даты представлены в формате: ггггММддххмм

Информация об API здесь

https://hourlypricing.comed.com/hp-api/


JSON: возвращает массив объектов json с элементами UTC millis и price.

 [
{"millisUTC":"1434686700000","price":"2.0"},
{"millisUTC":"1434686100000″,"price”:"2.5"},
{"millisUTC":"1434685800000″,"price”:"2.5"}
]
  

Комментарии:

1. Хотя он предоставляет исторические цены, он не предоставляет почасовую цену на день вперед за данный день.

2. Нет. Но это может быть полезно для других, которые смотрят на что-то подобное. Насколько полезен день вперед при ретроспективном взгляде? Я не знаю этих данных.

3. Конечно. Хотите ответить на этот вопрос на самом деле и учиться по пути.