Парсинг акций smart-lab.ru

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

Так произошло мое знакомство с библиотеками BeautifulSoup, Requests и CSVКак минимум первые две нужно проинсталлировать.

 

pip install bs4

pip install requests

 

from bs4 import BeautifulSoup as bs
import requests
import csv

# Необходимо чтобы в запросе была информация о браузере. Формируем заголовок
header = {'accept': '*/*',
          'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                        '(HTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}

# Адрес для парсинга
url ='https://smart-lab.ru/q/'


def parse(url, header):
    g = 0

    request = requests.get(url, headers=header)
    array_A = []
    if request.status_code == 200:
        soup = bs(request.content, 'html.parser')
        table = soup.find_all('table', {'class': 'simple-little-table trades-table'})
        for tr in table:
            td = tr.find_all('tr', )
            for a in td:
                t = a.find_all('td', )
                g +=1
                if g > 2: # пропуск двух строчек которые нам не интересны
                    array_A.append([t[0].text, t[2].text, t[3].text, t[6].text])

    else:
        print('no connection')
    return array_A


def export_csv(data):

    # Пустой список
    repack = []
    # Заголовки полей будущей таблицы
    header_names = ['№', 'Название', 'Код', 'Цена']

    # Работа с CSV файлом
    # Открытие
    # Запись заголовка

    with open('indexes.csv', 'w', newline='') as csv_file:
        writer = csv.DictWriter(csv_file, delimiter=';', fieldnames=header_names)
        writer.writeheader()

        for stock in data:
            # Так выглядит data. Перебираем элементы списка
            # [['1', 'Сбербанк', 'SBER', '244'], ['2', 'ЛУКОЙЛ', 'LKOH', '6079']......]
            # Нам надо
            # [{'№': '1', 'Название': 'Сбербанк', 'Код': 'SBER', 'Цена': '244'}.......]

            # Перепаковка и запись в файл
            writer.writerow(dict(zip(header_names, stock)))


# Программа выполняется отсюда. Сначала парсим котировки, а затем сохраняем в CSV
kotirovki = parse(url, header)
export_csv(kotirovki)

Комментарии


Добавить комментарий

footer
Перепечатывание материалов сайта с указанием первоисточника приветствуется.
Копирайт © 2019 - 2021. Блог PYTHON разработчика. Все права защищены.