Очистка данных от investing.com для BTC / ETH с использованием BeautifulSoup - PullRequest
0 голосов
/ 21 декабря 2018

Я написал некоторый код для очистки временных рядов BTC / ETH от investing.com, и он отлично работает.Однако мне нужно изменить вызов запросов, чтобы загруженные данные были из Kraken, а не по умолчанию для bitfinex и с 01.06.2016 вместо времени запуска по умолчанию.Эти параметры могут быть установлены вручную на веб-странице, но я не знаю, как отправить это через вызов запросов, за исключением того, что это может включать использование параметра «data».Благодарен за любой совет.

Спасибо,

КМ

Код уже написан на python и отлично работает по умолчанию

import requests
from bs4 import BeautifulSoup
import os
import numpy as np

# BTC scrape https://www.investing.com/crypto/bitcoin/btc-usd-historical-data
# ETH scrape https://www.investing.com/crypto/ethereum/eth-usd-historical-data

ticker_list = [x.strip() for x in open("F:\\System\\PVWAVE\\Crypto\\tickers.txt", "r").readlines()]
urlheader = {
  "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36",
  "X-Requested-With": "XMLHttpRequest"
}

print("Number of tickers: ", len(ticker_list))

for ticker in ticker_list:
    print(ticker)
    url = "https://www.investing.com/crypto/"+ticker+"-historical-data"
    req = requests.get(url, headers=urlheader, data=payload)
    soup = BeautifulSoup(req.content, "lxml")

    table = soup.find('table', id="curr_table")
    split_rows = table.find_all("tr")

    newticker=ticker.replace('/','\\')

    output_filename = "F:\\System\\PVWAVE\\Crypto\\{0}.csv".format(newticker)
    os.makedirs(os.path.dirname(output_filename), exist_ok=True)
    output_file = open(output_filename, 'w')
    header_list = split_rows[0:1]
    split_rows_rev = split_rows[:0:-1]

    for row in header_list:
        columns = list(row.stripped_strings)
        columns = [column.replace(',','') for column in columns]
        if len(columns) == 7:
            output_file.write("{0}, {1}, {2}, {3}, {4}, {5}, {6} \n".format(columns[0], columns[2], columns[3], columns[4], columns[1], columns[5], columns[6]))

    for row in split_rows_rev:
        columns = list(row.stripped_strings)
        columns = [column.replace(',','') for column in columns]
        if len(columns) == 7:
            output_file.write("{0}, {1}, {2}, {3}, {4}, {5}, {6} \n".format(columns[0], columns[2], columns[3], columns[4], columns[1], columns[5], columns[6]))

    output_file.close()

Данные загружаются для обмена по умолчанию и диапазона дат по умолчаниюно я хочу указать Kraken и время начала и окончания по умолчанию (01/06/16 и последний полный день, т.е. всегда вчера)

1 Ответ

0 голосов
/ 28 декабря 2018

Маленький фон

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

Как я узнал об этом?

  • Измените страницу по умолчанию и перейдите на страницу История Кракена .Вы увидите, что URL-адрес изменился на https://www.investing.com/crypto/bitcoin/btc-usd-historical-data?cid=49799.
  • Теперь щелкните правой кнопкой мыши на странице и выберите Inspect .Посмотрите на верхний ряд разделенного экрана, который только что открылся.Нажмите на вкладку Сети .Эта вкладка покажет вам цикл запрос / ответ любой веб-страницы, которую вы посещаете в браузере.
  • Найдите кнопку Очистить рядом с красной кнопкой, которую вы видите, и нажмите ее.Теперь у вас есть чистый лист.Вы сможете увидеть, что запрос отправляется на сервер, когда вы измените дату на этой странице.
  • Измените даты в соответствии с вашими потребностями, а затем нажмите Применить .Вы увидите, что на сервер был отправлен запрос с именем HistoricalDataAjax (для большей ясности см. Прилагаемое изображение ниже).Нажмите на нее и прокрутите вниз на вкладке Заголовки .Вы можете увидеть раздел под названием Данные формы .Это дополнительная скрытая (пока не такая скрытая) информация, которая отправляется на сервер.Он отправляется как запрос POST , так как вы не видите никаких изменений в URL.
  • В том же разделе Headers вы также можете увидеть, что Запросить URL is https://www.investing.com/instruments/HistoricalDataAjax

Under Networks tab view

Что теперь делать?

Вы должны быть умными внесите 3 изменений в ваш код Python.

  • Измените запрос с GET на POST .
  • Отправьте Данные формы в качестве полезной нагрузки для этого запроса.
  • Измените URL-адрес, который вы только что видели на вкладке Заголовки .

    url = "https://www.investing.com/instruments/HistoricalDataAjax"

    payload = {'header': 'Исторические данные Кракена BTC / USD', 'st_date': '12 / 01/2018 ',' end_date ': '12 / 01 /2018 ',' sort_col ':' date ',' action ':' исторические_данные ',' smlID ':' 145284 ',' sort_ord ':' DESC ',' interval_sec ':' Daily ',' curr_id ':' 49799 '}

    request.post (url, data = payload, headers = urlheader)

Внесите вышеупомянутые изменения и оставьтеДругие части вашего кода остаются прежними.Вы получите желаемый результат.Вы также можете изменить даты в соответствии с вашими потребностями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...