Извлечь данные о ценах CME в Python 3.6.8 - PullRequest
2 голосов
/ 09 июня 2019

Я относительно новичок в Python, поэтому прошу прощения, если это вопрос "Буша".

Я пытаюсь получить цены на фьючерсы WTI с этого сайта: https://www.cmegroup.com/trading/energy/crude-oil/west-texas-intermediate-wti-crude-oil-calendar-swap-futures_quotes_globex.html

Какие библиотеки мне следует использовать? Как мне нужно настроить вывод, когда он вытащен с сайта?

В настоящее время работает на Python 3.6.8 с библиотеками pandas, numpy, questions, urllib3, BeautifulSoup и json. Я не совсем уверен, что это правильные библиотеки и какие функции я должен использовать.

Вот базовая версия кода:

wtiFutC = 'https://www.cmegroup.com/trading/energy/crude-oil/west-texas-intermediate-wti-crude-oil-calendar-swap-futures_quotes_globex.html'
http = urllib3.PoolManager()
response2 = http.request('GET', wtiFutC)
print(type(response2.data)) #check the type of the data produced - bytes
print(response2.data) #prints out the data

soup2 = BeautifulSoup(response2.data.decode('utf-8'), features='html.parser')
print(type(soup2)) #check the type of the data produced - 'bs4.BeautifulSoup'
print(soup2) #prints out the BeautifulSoup version of the data

Я хочу, чтобы увидеть «Последнюю» цену для будущего WTI для всей кривой. Вместо этого я вижу что-то вроде этого:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<!--[if (gt IE 9) |!(IE)]><!-->
<html class="cmePineapple no-js" lang="en" xml:lang="en" 
xmlns="http://www.w3.org/1999/xhtml">
<!--<![endif]-->

Любая помощь или направление будет принята с благодарностью. Спасибо вам большое! :)

Ответы [ 3 ]

0 голосов
/ 10 июня 2019

Использовать Запросы-HTML . Это отличный ресурс, если вы уже знакомы с запросами.

0 голосов
/ 10 июня 2019

Используйте конечную точку, которую делает страница, и проанализируйте интересующий столбец (и дату) из json

import requests

r = requests.get('https://www.cmegroup.com/CmeWS/mvc/Quotes/Future/4707/G?quoteCodes=null&_=1560171518204').json()
last_quotes = [(item['expirationDate'], item['last']) for item in r['quotes']]
0 голосов
/ 09 июня 2019

Данные на этой веб-странице генерируются JavaScript, что затрудняет извлечение данных с помощью пакетов типа requests.Если это не так уж важно, я предлагаю вам найти другой источник данных, который использует минимальный JavaScript или вообще не использует его.Затем с помощью requests получите источник веб-страницы и извлеките из него данные.

Вы извлекаете данные, используя библиотеки, такие как BeautifulSoup или re (или даже pandas в некоторых случаях), и передаете их в библиотеки, такие как numpy или pandas, если хотите проанализировать иделать расчеты по данным.

В противном случае я предлагаю вам взглянуть на Selenium для поддержки javascript.

...