Найти в Дзене
Михаил Ксенофонтов

Парсинг данных с помощью скриптов Python (pandas_datareader).

В этой статье представлен сценарий на языке Python, который использует библиотеку pandas_datareader для разбора данных из различных источников. В частности, мы сосредоточимся на разборе акций с Нью-Йоркской фондовой биржи (NYSE) через Yahoo Finance. Если вам интересно узнать больше о pandas_datareader, посетите их официальный сайт. Библиотеки. Для начала нам необходимо установить две библиотеки - pandas_datareader и schedule, что мы можем сделать с помощью pip: import datetime as dt
from pandas_datareader import data as pdr
import schedule Далее нам нужно указать тикеры акций, которые мы хотим разобрать. Мы можем определить массив данных со списком биржевых тикеров, как показано ниже: stocks = ['GAPL', 'GIPL'] Или мы можем сохранить все тикеры в файл. Файл должен содержать массив данных в виде ['GAPL', 'GIPL']. Затем мы можем открыть файл и разобрать тикеры следующим образом with open(r'C:\folder_name\file_name.txt') as file:
stocks = eval(file.read()) Нам также нужно указать путь и

В этой статье представлен сценарий на языке Python, который использует библиотеку pandas_datareader для разбора данных из различных источников. В частности, мы сосредоточимся на разборе акций с Нью-Йоркской фондовой биржи (NYSE) через Yahoo Finance. Если вам интересно узнать больше о pandas_datareader, посетите их официальный сайт.

Python code.
Python code.

Библиотеки.

Для начала нам необходимо установить две библиотеки - pandas_datareader и schedule, что мы можем сделать с помощью pip:

import datetime as dt
from pandas_datareader import data as pdr
import schedule

Далее нам нужно указать тикеры акций, которые мы хотим разобрать. Мы можем определить массив данных со списком биржевых тикеров, как показано ниже:

stocks = ['GAPL', 'GIPL']

Или мы можем сохранить все тикеры в файл. Файл должен содержать массив данных в виде ['GAPL', 'GIPL']. Затем мы можем открыть файл и разобрать тикеры следующим образом

with open(r'C:\folder_name\file_name.txt') as file:
stocks = eval(file.read())

Нам также нужно указать путь и имя файла, куда мы хотим сохранить разобранные данные:

path = (r'C:\folder_name\\')
file_name = 'file_name.csv'

Теперь нам нужно указать период времени, за который мы хотим разобрать данные. Мы можем указать либо фиксированный период времени:

start = dt.datetime(2022, 1, 18)
end = dt.datetime(2022, 12, 22)

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

end = dt.datetime.now()
start = end - dt.timedelta(days=1)

Наконец, мы можем использовать pandas_datareader для разбора данных. Мы можем либо создать один файл для всех данных, либо сохранить каждый тикер в отдельном файле. Вот пример того, как сохранить все данные в одном файле:

for item in stocks:
df = pdr.get_data_yahoo(symbols = stocks, start = start, end=end, interval='d').stack("Symbols")
df.to_csv(path + file_name)

А вот пример того, как сохранить каждый тикер в отдельном файле:

for item in stocks:
df = pdr.get_data_yahoo(item, start = start, end=end, interval='d')
stocks.to_csv(path + item + '.csv')

После того как мы определили все эти параметры, мы можем автоматизировать сценарий с помощью библиотеки расписаний. Например, мы можем запускать скрипт каждые 40 секунд или в определенное время каждый день:

schedule.every(40).seconds.do(NYSE)
schedule.every().day.at('01:00').do(NYSE)

Вот пример того, как может выглядеть сценарий при полной реализации:

from pandas_datareader import data as pdr
import datetime as dt
import schedule

def nyse():
with open(r'C:\Pdata\NYSE\OUT\nyse_ticker.txt') as file:
stocks = eval(file.read())
directory = (r'C:\Pdata\NYSE\IN\\')
file_name = 'nyse.csv'
end = dt.datetime.now()
start = dt.datetime(2022, 11, 4)
for item in stocks:
df = pdr.get_data_yahoo(symbols=stocks, start=start).stack("Symbols")
df.to_csv(directory + file_name)
print('NYSE DONE', end)

Пример:

Наш скрипт собирает данные для NYSE: New-York Stock Exchange.

Каждый вечер в 3:10 утра он загружает данные за предыдущий день и сохраняет их в одном файле.
Затем в 7:01 утра он запускается снова и загружает недостающие данные с первого раза.

from pandas_datareader import data as pdr
import datetime as dt
import schedule

def time():
end = dt.datetime.now()
print('Time test', end)

def nyse():
with open(r'C:\Pdata\NYSE\OUT\nyse_ticker.txt') as file:
stocks = eval(file.read())
directory = (r'C:\Pdata\NYSE\IN\\')
file_name = 'nyse.csv'
end = dt.datetime.now()
start = dt.datetime(2022, 11, 4)
for item in stocks:
df = pdr.get_data_yahoo(symbols=stocks, start=start).stack("Symbols")
df.to_csv(directory + file_name)
print('NYSE DONE', end)
break

def nyse_error():
with open(r'C:\Pdata\NYSE\OUT\error.csv') as file:
stocks = eval(file.read())
directory = (r'C:\Pdata\NYSE\IN\\')
file_name = 'nyse_error.csv'
end = dt.datetime.now()
start = dt.datetime(2022, 11, 4)
for item in stocks:
df = pdr.get_data_yahoo(symbols=stocks, start=start).stack("Symbols")
df.to_csv(directory + file_name)
print('NYSE error DONE', end)
break

def main():
schedule.every(1).hour.do(time)
schedule.every().day.at('03:10').do(nyse)
schedule.every().day.at('07:01').do(nyse_error)

while True:
schedule.run_pending()


if __name__ == '__main__':
main()

Наконец, я хотел бы напомнить, что это всего лишь пример того, как может быть реализован парсер Python. Изменяя параметры скрипта, вы можете настроить его на любую необходимую вам информацию.
Не забывайте, что это необработанные данные, и вам нужно преобразовать их в базу данных.


Репозиторий GitHub:
https://github.com/KsenoLv.
Вы можете подписаться на последние обновления:
https://t.me/psqlpro
Официальная веб-страница: www.psql.pro