CoderCastrov logo
CoderCastrov
Парсер

Как создать автоматизированную систему бумажной торговли за 5 минут

Как создать автоматизированную систему бумажной торговли за 5 минут
просмотров
5 мин чтение
#Парсер

Сделай это за 5 секунд!

Избавьтесь от скучных задач с помощью Python (часть 1)

Вам надоело делать одно и то же? Чувствуете, что ваша жизнь состоит в том, чтобы делать одно и то же снова и снова?

Вот что, сегодня я собираюсь представить вам инструмент для автоматизации ваших СКУЧНЫХ задач - Python. Python, возможно, самый простой язык для изучения. Благодаря вашим навыкам в Python вы сможете не только увеличить свою производительность, но и сосредоточиться на работе, которая вам будет интересна.

Избавьтесь от скучных задач с помощью Python - это серия, поэтому перейдите по этой ссылке, чтобы просмотреть всю серию!

Давайте начнем!

Я буду использовать пример бумажной торговли на бирже Сингапура в качестве иллюстрации того, как можно автоматизировать процесс. Бумажная торговля позволяет вам практиковаться в инвестировании или торговле с использованием виртуальных денег, прежде чем вы реально вложите реальные деньги. Это хороший способ начать, чтобы проверить, работает ли ваша стратегия.

Вот повестка дня, которую я собираюсь представить:

Часть 1 - Введите код акции и сумму, которую вы хотите торговать, в текстовый файл.

Часть 2 - Как самостоятельно делать парсинг веб-страниц, полное путешествие.

Часть 3 - Очистка и табулирование данных.

Часть 4 - Вывод результата в файл csv или excel.

Следуйте всему путешествию, и вы заметите, насколько просто автоматизировать ваши скучные задачи и обновлять цены ЗА 5 секунд.



Часть 1 — Введите код акции и сумму, которую вы хотите торговать, в текстовый файл.

Запустите новый текстовый файл, введите код акции и цену, по которой вы будете покупать данную акцию, разделенные запятой.

selected.txt

Запустите новый текстовый файл, введите код акции и цену, по которой вы будете покупать данную акцию, разделенные запятой, как показано ниже.


Часть 2 — Как самостоятельно осуществлять парсинг веб-страниц, полный путь

Это снимок сайта SGX.

Снимок 1

Я собираюсь показать, как собрать всю информацию о торгах, содержащуюся в этой таблице. Откройте Google Chrome, щелкните правой кнопкой мыши на веб-сайте и вы увидите следующий снимок экрана.

Снимок 2

Нажмите кнопку "Инспектировать", затем перейдите на вкладку "Сеть" (в правом верхнем углу на следующем снимке экрана, выделенном фиолетовой рамкой).

Снимок 3

Затем щелкните на строке, выделенной фиолетовым прямоугольником, а затем выберите "Предварительный просмотр", как показано на выделенном зеленым прямоугольником снимке экрана 4 ниже.

Снимок 4

Теперь вы можете видеть, что все данные содержатся в формате JSON. Затем щелкните на фиолетовом прямоугольнике (Заголовки) на снимке экрана 5.

Снимок 5

Теперь я проверяю, какие элементы я должен использовать для сбора данных с этой страницы. Из снимка экрана 5 вы можете увидеть URL запроса, который вы должны использовать в части запроса позже. Из-за проблем с кодировкой, "%2c" в URL запроса будет закодировано в ",". Если вас интересует кодировка, просмотрите эту ссылку для получения дополнительной информации.

Теперь давайте подготовим необходимую информацию для отправки правильного запроса на сервер.

Часть 1 URL запроса

После замены всех "%2c" на ",", URL запроса будет выглядеть следующим образом.

[https://api.sgx.com/securities/v1.1?excludetypes=bonds&params=nc,adjusted-vwap,b,bv,p,c,change_vs_pc,change_vs_pc_percentage,cx,cn,dp,dpc,du,ed,fn,h,iiv,iopv,lt,l,o,p_,pv,ptd,s,sv,trading_time,v_,v,vl,vwap,vwap-currency](https://api.sgx.com/securities/v1.1?excludetypes=bonds&params=nc%2Cadjusted-vwap%2Cb%2Cbv%2Cp%2Cc%2Cchange_vs_pc%2Cchange_vs_pc_percentage%2Ccx%2Ccn%2Cdp%2Cdpc%2Cdu%2Ced%2Cfn%2Ch%2Ciiv%2Ciopv%2Clt%2Cl%2Co%2Cp_%2Cpv%2Cptd%2Cs%2Csv%2Ctrading_time%2Cv_%2Cv%2Cvl%2Cvwap%2Cvwap-currency)

Часть 2 Заголовки

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

Снимок 6

Ссылаясь на фиолетовый прямоугольник на снимке экрана 6, это часть заголовка, которую вы должны использовать при парсинге веб-сайта.

{"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
 "Origin": "[https://www2.sgx.com](https://www2.sgx.com)",
 "Referer": "[https://www2.sgx.com/securities/securities-prices](https://www2.sgx.com/securities/securities-prices)"}

Теперь давайте объединим все вместе, как показано в следующем коде.



Часть 3— Очистка данных

До этого у вас должен быть ответ в формате JSON. Мы будем использовать библиотеку Python pandas для очистки данных.

Сначала загрузите код акций, который вы ранее заполнили, и очистите его.

with open('selected.txt') as f:     
     selected_sc = f.readlines()  
selected_sc = [x.replace('\n', '') for x in selected_sc]
portfolio = {x.split(',')[0]: float(x.split(',')[1]) for x in selected_sc}

Затем загрузите полученные данные в объект JSON, а затем преобразуйте его в объект pandas Python.

data = json.loads(req.text)['data'] 
df = pd.DataFrame(data['prices']) 

Затем переименуйте названия столбцов, чтобы они были более понятными.

df = df.rename(
    columns={'b': 'Покупка',                  
             'lt': 'Последняя',
             'bv': 'Объем покупки',                  
             'c': 'Изменение',                  
             'sv': 'Объем продажи',                  
             'h': 'Максимум',                  
             'l': 'Минимум',                  
             'o': 'Открытие',                  
             'p': 'Изменение в процентах',                  
             's': 'Продажа',                  
             'vl': 'Объем',                  
             'nc': 'Код акции'})

Наконец, отфильтруйте интересующий вас код акций, в которые вы хотите инвестировать или торговать, а затем рассчитайте разницу в цене.

df = df[df['Код акции'].isin(portfolio.keys())][['Код акции', 'Последняя']] df['Цена покупки'] = df['Код акции'].map(portfolio) df['Процентное изменение'] = (df['Последняя'] - df['Цена покупки'])*100 df['Процентное изменение'] = df['Процентное изменение'].apply(                                 lambda x: '{0:.2f}%'.format(x))


Часть 4 — Вывод результата в файл csv или excel.

Сохраните данные в файл csv и 🎉МЫ ЗАВЕРШИЛИ! 🎉

df.to_csv('reseult.csv', index=False)

Ниже приведен снимок экрана файла csv:

csv file

Полный код можно найти здесь.

Счастливого кодирования!


Заключительные мысли

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

Спасибо за прочтение этого поста. Не стесняйтесь оставлять комментарии ниже по темам, которые вас могут заинтересовать. В будущем я буду публиковать больше постов о своем опыте и проектах.


О авторе

Low Wei Hong - Data Scientist в Shopee. Его опыт включает в себя скрапинг веб-сайтов, создание конвейеров данных и реализацию моделей машинного обучения для решения бизнес-задач.

Он предоставляет услуги парсинга, которые позволяют получить точные и очищенные данные, которые вам нужны. Вы можете посетить этот веб-сайт, чтобы просмотреть его портфолио и связаться с ним для получения услуг парсинга.

Вы можете связаться с ним через LinkedIn и Medium.


Low Wei Hong - Средний

Читайте записи Low Wei Hong на Medium. Data Scientist в Shopee. Каждый день Low Wei Hong и тысячи других...

medium.com