Как очистить исторические данные, используя селен с выпадающими списками? - PullRequest
2 голосов
/ 10 апреля 2019

Я пытаюсь очистить исторические и прогнозируемые почасовые цены на энергию по следующему 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()

Ответы [ 3 ]

1 голос
/ 10 апреля 2019

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

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

https://hourlypricing.comed.com/api?type=5minutefeed&datestart=201712310000&dateend=201812310000

Датыпредоставляются в формате: yyyyMMddhhmm

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

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


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

[
{"millisUTC":"1434686700000","price":"2.0"},
{"millisUTC":"1434686100000″,"price”:"2.5"},
{"millisUTC":"1434685800000″,"price”:"2.5"}
]
1 голос
/ 10 апреля 2019

Вместо того, чтобы идти по календарю и выбирать каждый день, как это было бы днем.Вместо этого вы могли бы перейти прямо к источнику информации, проанализировать вывод fetch () для красивого супа и получить всю необходимую вам информацию:)

Мы выясняем, сколько дней у нас вмесяц, передавая этот список в запрос 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
0 голосов
/ 11 апреля 2019

Я не совсем понимаю, как это можно сделать с помощью выбора даты.

Другие упомянули о решениях, работая над средством выбора даты, которое является лучшим - если возможно Но если вам нужно автоматизировать средства выбора даты с помощью selenium ide ++, см. Здесь . Этот подход OCR хорошо работает для меня и быстро реализуется.

  • открыть селектор даты
  • ограничить область компьютерного зрения областью контроля даты
  • позвольте IDE найти и щелкните номер для даты e. г. «22» или «17» с XClick | OCR=text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...