Узнайте, когда цена криптовалюты ниже, не открывая сайт каждый раз

В этом проекте мы собираемся очистить сайт crypto.com, чтобы получить 500 самых эффективных криптовалют и сохранить все данные в базе данных MySQL с отметкой времени в качестве имени таблицы.

Введение

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

Мы будем очищать crypto.com/price, чтобы получить 500 самых эффективных криптовалют. Ниже скриншот с сайта.

Предпосылка

Прежде чем начать этот проект, нам нужно установить виртуальную среду Python. Посетите Краткое введение в виртуальные среды Python, чтобы узнать, как настроить виртуальную среду в python.

После создания виртуальной среды установите модули Python с помощью приведенной ниже команды.

$ pip install requests bs4 pandas mysql-connector-python

Теперь, когда мы установили модули, мы можем запустить проект.

Веб-скрейпинг

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

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

# import <packages>
import requests
from bs4 import BeautifulSoup4
# getting HTML code from webpage and formatting
URL = 'https://crypto.com/price'
response = request.get(URL)
soup = BeautifulSoup4(response.text)
# scraping table element from HTML code
table = soup.find('table')

Код

HTML-коды всегда заполнены несколькими вложенными элементами, иногда нам нужно вручную выполнить какую-то задачу, чтобы получить текстовые данные. В строке 28 – 29 нам нужно отфильтровать больше, чтобы получить текстовое значение.

После выполнения приведенного выше кода мы получим два списка. Первый будет хранить заголовок из таблицы, а второй — строки таблицы в формате кортежа. Эти данные могут быть отформатированы во фрейм данных и сохранены в виде файла CSV.

Преобразование необработанных данных в фрейм данных и сохранение в виде файла CSV

from pandas import DataFrame
crypto_df = DataFrame(crypto_data, columns=heading)
crypto_df.to_csv(<path>, index=False)

Соединение с MySQL

Используйте приведенный ниже код для подключения базы данных MySQL к Python.

Создать команду

CREATE TABLE `crypto_scraper`.`{table_name}` (
    `Rank` INT NOT NULL,
    `Name` VARCHAR(50) NOT NULL,
    `Price` VARCHAR(20) NOT NULL,
    `24H_Change` VARCHAR(20) NOT NULL,
    `24H_Volume` VARCHAR(20) NOT NULL,
    `Market_Cap` VARCHAR(20) NOT NULL,
    PRIMARY KEY (`Name`)
);

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

Формат имени файла: crypto_%Y%m%d%H%M%S

Вставить команду

INSERT_COMMAND = \
    'INSERT INTO {table} VALUES(%s, %s, %s, %s, %s, %s);'.format(
        table=table_name)

Выполнение команд SQL в Python

try:
    cursor.execute(CREATE_COMMAND)
    database.commit()
    cursor.executemany(INSERT_COMMAND, crypto_data)
    database.commit()
except Error as e:
    print(e)

Приведенный выше код передаст все криптографические данные в базу данных.

Репозиторий GitHub: https://github.com/arabind-meher/Crypto-Scraping.git