Yahoo Finance — одна из самых популярных платформ для отслеживания цен акций, финансовых новостей и данных компаний. С более чем 335 миллионами пользователей в месяц, Yahoo Finance — ценный источник структурированной и… финансовые данные в реальном времени.

В этом руководстве вы узнаете, как извлекать данные из Yahoo Finance с помощью Python, а также узнаете о лучших методах, которые позволят вам избежать мер борьбы с ботами.

TL; DR:

  • Узнайте, как выполнить скрапинг Yahoo Finance с помощью Python и Crawlbase Crawling API.
  • Охватывает извлечение цены акций, изменение цены и временных меток рынка.
  • Включает полный пример кода и Crawlbase советы по интеграции.

Вот короткое видео о том, как извлечь финансовые данные из Yahoo Finance:

Содержание

1. Необходимые инструменты (Python + Crawlbase)

2. Пошаговое руководство: как скопировать данные с веб-страницы Yahoo Finance

3. Извлечение заголовка страницы с помощью BeautifulSoup

4. Получение цен на акции от Yahoo Finance

5. Анализ индикаторов изменения цены (вверх/вниз)

6. Получение метки времени рынка

7. Полный код Python: Yahoo Finance Scraper

8. Заключительные мысли и дальнейшие шаги

9. Часто задаваемые вопросы (FAQ)

1. Инструменты, необходимые для парсинга Yahoo Finance (Python + Crawlbase)

Как только Питон После установки и выбора предпочитаемой IDE, пришло время установить инструменты, необходимые для парсинга Yahoo Finance. Следующие команды установят Crawlbase Библиотека Python и Beautifulsoup4

Чтобы установить пакет, просто откройте командную строку (Windows) или терминал (macOS/Linux), создайте каталог, в котором вы хотите сохранить свой код Python, и используйте команду pip для установки пакетов, как показано ниже:

1
2
pip установить crawlbase
Пип установить BeautifulSoup4

2. Пошаговое руководство: как скопировать данные с веб-страницы Yahoo Finance

Теперь пришло время написать наш код. Сначала мы напишем код для сканирования полного исходного кода HTML нашей целевой веб-страницы. На этом этапе мы будем использовать Crawlbase пакет.

Начните с открытия вашего любимого текстового редактора или IDE и создайте новый файл Python. Для целей этого руководства давайте создадим файл с именем scraper.py с вашего терминала/консоли:

1
сенсорный скребок.py

Для демонстрации мы будем использовать это Финансовая страница Yahoo.

Веб-страница Yahoo Finance

Скопируйте полный код ниже и прочитайте пояснения, чтобы понять каждый раздел:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
от база сканирования Импортировать CrawlingAPI

защиту ползать(page_url, api_token):
стараться:
# Инициализируем объект CrawlingAPI с предоставленным токеном
api = CrawlingAPI({токен: api_token})

# Получить содержимое страницы
ответ = api.get(page_url)

# Проверьте, был ли запрос успешным
if ответ['status_code'] == 200:
# Извлечь данные
Распечатать(ответ[«Тело»])
еще:
Распечатать(f"Ошибка: {ответ}")


кроме Исключение as e:
Распечатать(f"Во время сканирования произошла ошибка: {е}")
возвращают {}

if __имя__ == "__основной__":
# Используйте токен запроса Javascript из Crawlbase
api_token = 'Crawlbase_Токен'

URL_страницы = «https://finance.yahoo.com/quote/AAPL»

сканировать(page_url, api_token)

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

1
питон scraper.py

В случае успеха вы получите ответ, подобный этому:

HTML-код Yahoo Finance

3. Извлечение заголовка страницы с помощью BeautifulSoup

В этом разделе мы сосредоточимся на извлечении содержимого исходного кода HTML, который мы получили при сканировании веб-страницы Yahoo Finance. Мы должны начать с вызова библиотеки Beautiful Soup для разбора HTML и представления его в формате JSON.

1
2
из базы данных импорта CrawlingAPI
из bs4 импортировать BeautifulSoup

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

Yahoo Финансы Название

Как только у вас есть строка для элемента заголовка, просто используйте селектор BeautifulSoup для извлечения данных. Вот как вы можете написать код:

1
2
3
4
5
6
7
8
9
10
11
12
13
защиту scrape_data(ответ):
стараться:
# Анализ HTML-контента с помощью Beautiful Soup
суп = КрасивыйСуп(ответ['тело'], 'html.парсер')

# Извлечь необходимые данные
заголовок = суп.выберите_один('div.hdr h1').текст.полоска() if суп.выберите_один('div.hdr h1') еще Ничто

возвращают {'заглавие': заголовок}

кроме Исключение as e:
Распечатать(f"Во время скрейпинга произошла ошибка: {е}")
возвращают {}

Код начинается с попытки разобрать HTML-контент веб-страницы. Он использует конструктор BeautifulSoup, передавая HTML-контент (response['body']) и тип парсера ('html.parser').

Внутри try блок, функция пытается извлечь определенные данные из проанализированного HTML. Она пытается найти <h1> элемент с именем класса 'svelte-ufs8hf' используя select_one метод предоставлен Beautiful Soup.

Как только элемент найден, он извлекает текстовое содержимое <h1> элемент и присваивает его переменной title. Если <h1> элемент не найден, title на None.

В случае ошибки он выводит сообщение об ошибке на консоль и возвращает пустой словарь в качестве запасного варианта.

4. Получение цен на акции от Yahoo Finance

Следующие соответствующие данные, которые мы хотим извлечь для веб-страницы Yahoo Finance, — это последняя торговая цена финансового актива или просто Цена. Начните с выделения цены и ее проверки, как показано на изображении ниже:

Yahoo финансы цена

Напишите код для извлечения элемента Price:

1
2
3
4
5
6
7
8
9
10
11
12
13
защиту scrape_data(ответ):
стараться:
# Анализ HTML-контента с помощью Beautiful Soup
суп = КрасивыйСуп(ответ['тело'], 'html.парсер')

# Извлечь необходимые данные
цена = суп.выберите_один('.livePrice[data-testid="qsp-price"]').текст.полоска() if суп.выберите_один('.livePrice[data-testid="qsp-price"]') еще Ничто

возвращают {'цена': цена}

кроме Исключение as e:
Распечатать(f"Во время скрейпинга произошла ошибка: {е}")
возвращают {}

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

5. Анализ индикаторов изменения цены (вверх/вниз)

Нашими следующими целевыми данными будут изменения цены. Это значение представляет собой изменение цены финансового актива, например, акции, по сравнению с предыдущим закрытием.

Yahoo Finance изменила цену

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

1
2
3
4
5
6
7
8
9
10
11
12
13
защиту scrape_data(ответ):
стараться:
# Анализ HTML-контента с помощью Beautiful Soup
суп = КрасивыйСуп(ответ['тело'], 'html.парсер')

# Извлечь необходимые данные
изменить = суп.выбрать_один('.priceChange[data-testid="qsp-price-change"]').текст.полоска() if суп.выберите_один('.priceChange[data-testid="qsp-price-change"]') еще Ничто

возвращают {'изменять': изменять}

кроме Исключение as e:
Распечатать(f"Во время скрейпинга произошла ошибка: {е}")
возвращают {}

6. Получение метки времени рынка

Наконец, мы также извлечем Market Timestamp. Он относится к конкретной дате, на которую рассчитываются цены. Например, если вы видите «At close» с последующей датой «April 19, 2024», это означает, что предоставленная информация относится к цене закрытия актива 19 апреля 2024.

Также обратите внимание, что если отображается «Открытие рынка», это означает, что отображаемая цена — это цена, по которой актив начал торговаться при открытии рынка.

Дата закрытия Yahoo Finance

Выделите данные и перейдите к проверке, чтобы получить связанный селектор. Давайте напишем код еще раз, чтобы извлечь данные с помощью BeautifulSoup.

1
2
3
4
5
6
7
8
9
10
11
12
13
защиту scrape_data(ответ):
стараться:
# Анализ HTML-контента с помощью Beautiful Soup
суп = КрасивыйСуп(ответ['тело'], 'html.парсер')

# Извлечь необходимые данные
market_timestamp = следующий((s.текст.полоска() для s in суп.выбрать('div[slot="marketTimeNotice"] промежуток') if «В конце:» in с.текст or «Открытие рынка» in с.текст), Ничто)

возвращают {'market_timestamp': market_timestamp}

кроме Исключение as e:
Распечатать(f"Во время скрейпинга произошла ошибка: {е}")
возвращают {}

7. Полный код Python: Yahoo Finance Scraper

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
от база сканирования Импортировать CrawlingAPI
от bs4 Импортировать КрасивыйСуп
Импортировать JSON

защиту ползать(page_url, api_token):
стараться:
# Инициализируем объект CrawlingAPI с предоставленным токеном
api = CrawlingAPI({токен: api_token})

# Получить содержимое страницы
ответ = api.get(page_url)

# Проверьте, был ли запрос успешным
if ответ['status_code'] != 200:
Распечатать(f"Ошибка: {ответ}")
возвращают {}

# Извлеченные данные
очистка_данных = очистка_данных(ответ)
Распечатать(f'{scraped_data}')
возвращают скопированные_данные

кроме Исключение as e:
Распечатать(f"Во время сканирования произошла ошибка: {е}")
возвращают {}

защиту scrape_data(ответ):
стараться:
# Анализ HTML-контента с помощью Beautiful Soup
суп = КрасивыйСуп(ответ['тело'], 'html.парсер')

# Извлечь необходимые данные
заголовок = суп.выберите_один('div.hdr h1').текст.полоска() if суп.выберите_один('div.hdr h1') еще Ничто
цена = суп.выберите_один('.livePrice[data-testid="qsp-price"]').текст.полоска() if суп.выберите_один('.livePrice[data-testid="qsp-price"]') еще Ничто
изменить = суп.выбрать_один('.priceChange[data-testid="qsp-price-change"]').текст.полоска() if суп.выберите_один('.priceChange[data-testid="qsp-price-change"]') еще Ничто
market_timestamp = следующий((s.текст.полоска() для s in суп.выбрать('div[slot="marketTimeNotice"] промежуток') if «В конце:» in с.текст or «Открытие рынка» in с.текст), Ничто)

возвращают {'заглавие': заголовок, 'цена': цена, 'изменять': изменять, 'market_timestamp': market_timestamp}

кроме Исключение as e:
Распечатать(f"Во время скрейпинга произошла ошибка: {е}")
возвращают {}

if __имя__ == "__основной__":
# Используйте токен запроса Javascript из Crawlbase
api_token = 'Crawlbase_Токен'

# Список акций для сканирования
акции = ['ААПЛ', «ТСЛА», «BTC-USD»]
данные_акций = {«акции»: []}

для акции in акции:
URL_страницы = f'https://finance.yahoo.com/quote/{запас}'

# Вызовите функцию сканирования и добавьте извлеченные данные в словарь stocks_data
данные_акций[«акции»].append(crawl(page_url, api_token))

# Записать извлеченные данные в файл JSON
с открытый('yahoo.json', 'w') as f:
json.dump(stocks_data, f)

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

1
питон scraper.py

В случае успеха должен быть получен аналогичный результат, показанный ниже:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"акции": [
{
"заглавие": "Apple Inc. (AAPL)",
"цена": "168.99",
"изменять": "-3.70",
"дата_закрытия": "По состоянию на 12:09 по восточному поясному времени. Рынок открыт".
},
{
"заглавие": "Tesla, Inc. (TSLA)",
"цена": "156.90",
"изменять": "-4.58",
"дата_закрытия": "По состоянию на 12:09 по восточному поясному времени. Рынок открыт".
},
{
"заглавие": «Биткойн USD (BTC-USD)»,
"цена": "61,966.21",
"изменять": "-2,804.80",
"дата_закрытия": «По состоянию на 4:08 UTC. Рынок открыт».
}
]
}

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

8. Заключительные мысли и дальнейшие шаги

Вы изучили подробное руководство по эффективному созданию парсера для Yahoo Finance с использованием Python. Crawlbase API и BeautifulSoup. Вы узнали, как извлекать чистые и полезные данные из веб-страниц и настраивать их для своих проектов или анализа.

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

Мы рекомендуем интеграцию с Crawlbase Crawling API, который управляет ротацией IP-адресов, CAPTCHA и рендерингом.

9. Часто задаваемые вопросы (FAQ)

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

Как извлечь данные из Yahoo Finance?

  1. Определите данные для сбора и проверки веб-сайта.
  2. Выберите инструмент или библиотеку для извлечения данных с веб-страниц.
  3. Используйте выбранный инструмент для сбора данных, чтобы отправить HTTP-запрос GET на целевой URL.
  4. Проанализируйте HTML-содержимое веб-страницы, используя возможности анализа инструмента скрапинга.
  5. В зависимости от ваших потребностей вы можете сохранить собранные данные в файле, базе данных или структуре данных для последующего анализа или использовать их непосредственно в своем приложении.

Какие инструменты и библиотеки можно использовать для парсинга Yahoo Finance?

Для веб-скрейпинга в Python доступно несколько инструментов и библиотек, включая BeautifulSoup, Scrapy и Selenium. Кроме того, вы можете использовать API, такие как Crawlbase API для более легкого доступа к веб-данным. Выберите инструмент или библиотеку, которая лучше всего соответствует требованиям вашего проекта и технической экспертизе.