Современные инвесторы и аналитики активно используют информацию с Google Finance для получения актуальных и точных финансовых данных. Этот ресурс предпочтителен для мониторинга акций, индексов и рыночных тенденций, предоставляя подробные данные о финансовых показателях компаний. Python, благодаря своим мощным библиотекам для веб-скрапинга, является идеальным инструментом для этой задачи. В дальнейшем руководстве вы узнаете, как использовать Python для сбора данных с Google Finance.
Перед началом работы убедитесь, что на вашей системе установлен Python. Вам также потребуются библиотеки: requests для выполнения HTTP-запросов и lxml для парсинга HTML-контента веб-страниц. Для установки необходимых библиотек используйте следующие команды в командной строке:
pip install requests
pip install lxml
Далее рассмотрим пошагово процесс извлечения данных с Google Finance:
Для сбора данных с Google Finance нам нужно определить конкретные HTML-элементы, содержащие интересующую нас информацию:
Эти выражения XPath необходимы для навигации и извлечения соответствующих данных из HTML-структуры страниц Google Finance.
Название:
Цена:
Дата:
При настройке скрапера важно уделить внимание нескольким ключевым аспектам, чтобы обеспечить эффективность и безопасность сбора данных.
Для получения HTML-содержимого с сайта Google Finance, воспользуемся библиотекой requests. Это начальный шаг, позволяющий загрузить страницу, с которой будут извлекаться данные.
Правильная настройка HTTP-заголовков, в частности, User-Agent, крайне важна для успешного скрапинга. Это помогает имитировать запросы, выполняемые обычными пользователями, тем самым уменьшая риск распознавания скрипта как бота и его блокировки веб-ресурсом. Неправильные или отсутствующие заголовки могут привести к тому, что сервер отклонит ваш запрос или вернет неполные или некорректные данные.
import requests
# Определение заголовков для имитации посещения браузером и избежания блокировки сервером
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1', # Заголовок запроса "Do Not Track"
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-arch': '"x86"',
'sec-ch-ua-bitness': '"64"',
'sec-ch-ua-full-version-list': '"Not/A)Brand";v="8.0.0.0", "Chromium";v="126.0.6478.114", "Google Chrome";v="126.0.6478.114"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-model': '""',
'sec-ch-ua-platform': '"Linux"',
'sec-ch-ua-platform-version': '"6.5.0"',
'sec-ch-ua-wow64': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
}
# Определение URL страницы Google Finance для BNP Paribas (тикер BNP) на бирже Euronext Paris (EPA)
url = "https://www.google.com/finance/quote/BNP:EPA?hl=en"
# Осуществление HTTP GET запроса на URL с указанными заголовками
response = requests.get(url, headers=headers)
При осуществлении веб-скрапинга данных с Google Finance использование прокси становится необходимым по следующим причинам:
# Определение настроек прокси
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'https://your_proxy_address:port',
}
# Выполнение HTTP GET запроса к URL с указанными заголовками и прокси
response = requests.get(url, headers=headers, proxies=proxies)
После получения HTML-содержимого нам необходимо проанализировать его, используя библиотеку lxml. Это позволит нам выполнять навигацию по структуре HTML и извлекать необходимые данные.
Функция fromstring из модуля lxml.html импортируется для парсинга HTML-контента в объект Element. Метод fromstring анализирует response.text — исходный HTML с веб-страницы, полученный ранее, и возвращает объект Element, сохраняемый в переменной parser, представляющий корень разобранного HTML-дерева.
from lxml.html import fromstring
# Парсинг HTML-контента ответа с использованием метода fromstring библиотеки lxml
parser = fromstring(response.text)
После того как HTML-контент был успешно преобразован в объект Element с помощью библиотеки lxml, мы можем использовать выражения XPath для извлечения конкретных данных из разобранного HTML-дерева. XPath позволяет точно адресовать нужные элементы на странице по их характеристикам, таким как атрибуты, классы или иерархическое положение.
# Список для хранения выходных данных
finance_data_list = []
# Извлечение названия финансового инструмента
title = parser.xpath('//div[@class="zzDege"]/text()')[0]
# Извлечение текущей цены акции
price = parser.xpath('//div[@class="YMlKec fxKbKc"]/text()')[0]
# Извлечение даты
date = parser.xpath('//div[@class="ygUjEc"]/text()')[0]
# Создание словаря для хранения извлеченных данных
finance_data = {
'title': title,
'price': price,
'date': date
}
# Добавление данных в список finance data list
finance_data_list.append(finance_data)
Собранные данные можно дополнительно обработать или сохранить в структурированном формате, например, JSON:
Переменная output_file указывает имя файла JSON, в котором будут сохранены данные (finance_data.json). Выражение open(output_file, 'w') открывает файл в режиме записи, а json.dump(finance_data_list, f, indent=4) записывает список finance_data_list в файл с отступом в 4 пробела для удобства чтения.
# Сохранение списка finance_data_list в файл JSON
output_file = 'finance_data.json'
with open(output_file, 'w') as f:
json.dump(finance_data_list, f, indent=4)
При веб-скрапинге крайне важно обрабатывать исключения запросов, чтобы обеспечить устойчивость и надежность вашего скрипта. Некоторые неудачные запросы могут быть вызваны различными причинами, включая сетевые проблемы, ошибки сервера или тайм-ауты. Использование библиотеки requests в Python позволяет эффективно управлять этими исключениями.
try:
# Отправка GET-запроса по URL
response = requests.get(url)
# Вызов исключения HTTPError для плохих ответов (статус-коды 4xx или 5xx)
response.raise_for_status()
except requests.exceptions.HTTPError as e:
# Обработка HTTP ошибок (например, 404, 500 и т.д.)
print(f"HTTP error occurred: {e}")
except requests.exceptions.RequestException as e:
# Обработка любых других исключений, которые могут возникнуть во время запроса
print(f"An error occurred: {e}")
В этом примере код в блоке try выполняет запрос и проверяет его статусный код. Если возникает ошибка, соответствующее исключение перехватывается и обрабатывается в одном из блоков except. Это гарантирует, что ваш скрипт сможет правильно реагировать на различные проблемы во время выполнения запросов, поддерживая при этом его функционирование.
Интегрируем все элементы, чтобы создать функцию скрапера, которая извлекает, анализирует и получает данные из нескольких URL Google Finance:
import requests
from lxml.html import fromstring
import json
import urllib3
import ssl
ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()
# Список URL для скрапинга
urls = [
"https://www.google.com/finance/quote/BNP:EPA?hl=en",
"https://www.google.com/finance/quote/SPY:NYSEARCA?hl=en",
"https://www.google.com/finance/quote/SENSEX:INDEXBOM?hl=en"
]
# Заголовки для имитации посещения браузером
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-arch': '"x86"',
'sec-ch-ua-bitness': '"64"',
'sec-ch-ua-full-version-list': '"Not/A)Brand";v="8.0.0.0", "Chromium";v="126.0.6478.114", "Google Chrome";v="126.0.6478.114"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-model': '""',
'sec-ch-ua-platform': '"Linux"',
'sec-ch-ua-platform-version': '"6.5.0"',
'sec-ch-ua-wow64': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
}
# Настройка прокси
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'https://your_proxy_address:port',
}
# Список для хранения извлеченных данных
finance_data_list = []
# Итерация по каждому URL и скрапинг данных
for url in urls:
try:
# Отправка GET-запроса к URL
response = requests.get(url, headers=headers, proxies=proxies, verify=False)
# Проверка на наличие ошибок в ответе
response.raise_for_status()
# Парсинг HTML-контента ответа
parser = fromstring(response.text)
# Извлечение заголовка, цены и даты
title = parser.xpath('//div[@class="zzDege"]/text()')[0]
price = parser.xpath('//div[@class="YMlKec fxKbKc"]/text()')[0]
date = parser.xpath('//div[@class="ygUjEc"]/text()')[0]
# Сохранение извлеченных данных в словаре
finance_data = {
'title': title,
'price': price,
'date': date
}
# Добавление словаря в список
finance_data_list.append(finance_data)
except requests.exceptions.HTTPError as e:
# Обработка HTTP ошибок
print(f"HTTP error occurred for URL {url}: {e}")
except requests.exceptions.RequestException as e:
# Обработка других возможных ошибок во время запроса
print(f"An error occurred for URL {url}: {e}")
# Сохранение списка finance_data_list в файл JSON
output_file = 'finance_data.json'
with open(output_file, 'w') as f:
json.dump(finance_data_list, f, indent=4)
print(f"Scraped data saved to {output_file}")
Вывод:
Это руководство по сбору данных с Google Finance с помощью Python, библиотек lxml и requests создает прочную основу для разработки мощных инструментов сбора финансовых данных, которые могут быть применены для тщательного анализа рынка, мониторинга конкурентов, или принятия обоснованных инвестиционных решений.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.ru!
Комментарии: 0