CoderCastrov logo
CoderCastrov
Парсер

Как создать автоматизированный сборщик новостей о акциях

Как создать автоматизированный сборщик новостей о акциях
просмотров
5 мин чтение
#Парсер

Пошаговая инструкция по созданию автоматизированной машины!

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

Вам надоело делать одно и то же? Чувствуете, что ваша жизнь состоит только из повторения одного и того же?

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

*Если вы хотите заказать услуги парсинга веб-сайтов, пожалуйста, дайте мне знать по этой ссылке. :)

В противном случае, приступим!

Я буду использовать пример для иллюстрации. В этом примере нам необходимо скачать файлы с веб-сайта SGX (Singapore Stock Exchange) и загрузить их в указанную папку Google Drive.

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

Часть 1 — Получение всех ссылок на файлы PDF с SGX

Часть 2 — Скачивание всех файлов PDF по полученным ссылкам

Часть 3 — Загрузка файлов в Google Drive

Надеюсь, вам понравится эта серия, и давайте приступим к делу.



Часть 1 — Получение всех ссылок на файлы PDF с SGX

Быстрый взгляд на веб-сайт SGX

Давайте взглянем на главную страницу SGX, на которой отображаются новости компании (ссылка), как показано на снимке 1 ниже:

Снимок

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

На этой странице вы можете найти ссылку для загрузки указанного отчета в формате PDF (выделена фиолетовым прямоугольником) внизу страницы, как показано на снимке 2 ниже.

Снимок

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

Начало парсинга

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

Тщательно проанализировав, мы видим, что все данные новостей получаются через api-вызов "?periodstart=..." (как показано в выделенной фиолетовой рамке на снимке экрана 3).

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

Snapshot 4 Snapshot 5

Обратитесь к фиолетовой рамке на снимке экрана 4, базовый url для API - https://api.sgx.com/announcements/v1.0/?, после ? будут параметры строки запроса.

Что такое параметры строки запроса? Вы можете просто считать это расширением url, которое нужно добавить в конец "?" для запроса данных, удовлетворяющих вашим условиям. В нашем случае возьмем 20140809_16000 (periodstart) в качестве примера.

20140809_16000 можно рассматривать как дату + '' + 16000, что означает, что мы можем изменить его на нужную нам дату. И наоборот, для periodend вы можете рассматривать как дату + '' + 155959.

Например, если вы хотите спарсить только новости с 2019-01-01 по 2019-02-01, вы можете изменить дату periodstart на 20190101 и дату periodend на 20190201.

Код выше сначала устанавливает начальную дату для запроса как день до сегодня и конечную дату для запроса как сегодня. Добавив их к base_url, мы можем получить объявления компании на сегодняшний день. Обратите внимание, что данные, которые мы получим, будут в формате JSON. Поэтому мы можем преобразовать данные из формата JSON непосредственно в фрейм данных pandas, передав JSON непосредственно в качестве аргумента в pd.DataFrame(). Затем отфильтруйте фрейм данных, чтобы он содержал только новости о наших интересующих нас акциях, в нашем случае это "LODHA DEVELOPERS INTERNATIONAL LIMITED".



Часть 2 - Скачивание всех PDF-файлов из извлеченных ссылок

После получения нескольких ссылок на объявления компаний, пришло время скачать все нужные нам PDF-файлы.

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

элементе: a

атрибут: href

Итак, используя парсер BeautifulSoup и получив значение атрибута href тега a, вы сможете получить ссылку на PDF. Теперь, чтобы скачать PDF-файл по указанному URL, нам просто нужно получить содержимое ответа и вывести его в файл формата PDF.

Обратите внимание, что мы используем wb, так как содержимое PDF на URL, которое мы получим, находится в двоичном формате, нам нужно указать Python, что мы хотим записать двоичное содержимое в выходной файл. Кроме того, убедитесь, что ваше имя файла имеет расширение .pdf.

На основе приведенного выше кода, функция def get_pdf() отвечает за скачивание всех соответствующих ссылок в мою папку по умолчанию data. Кратко говоря, я буду перебирать pandas dataframe, извлекать все ссылки и затем скачивать все нужные нам PDF-файлы.

Следуя до этого момента, поздравляю! Вам остался только последний шаг!



Часть 3 - Загрузка файлов в Google Drive

Прежде всего, вам следует перейти по этой ссылке, чтобы получить учетные данные для Google Drive.

Затем сохраните файл учетных данных с именем client_secret.json и поместите его в ту же папку, где находится ваш файл Python.

Далее скопируйте приведенный выше скрипт и заполните current_google_folder_id своим идентификатором папки назначения. Этот скрипт сохранит ваши токены во внешний файл mycreds.txt, чтобы вам не приходилось каждый раз входить в свою учетную запись на Google Drive при запуске скрипта.

Что делает приведенный выше скрипт, так это сначала получает все имена папок в вашей текущей папке Google. Затем он проверяет, существует ли папка с указанным именем акции, и, если нет, создает папку с именем акции. Затем загружает все файлы в папку с именем акции.

Наконец, он удаляет все файлы в папке data, чтобы сохранить вашу локальную папку data в чистоте.

Все готово! Если вы следовали всем шагам с самого начала, вы сможете увидеть, как ваш файл загружается в папку назначения на Google Drive!


Финальные мысли

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

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


Об авторе

Лоу Вей Хонг - это Data Scientist в Shopee. Его опыт включает больше скрапинга веб-сайтов, создания конвейеров данных и также реализации моделей машинного обучения для решения бизнес-задач.

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

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

Low Wei Hong - Medium

Читайте записи от Low Wei Hong на Medium. Data Scientist | Веб-парсинг-сервис: http://datainfinite.mystrikingly.com/...

medium.com