Сучасні інвестори та аналітики активно використовують інформацію з Google Finance для отримання відповідних та точних фінансових даних. Цей ресурс є кращим для моніторингу акцій, індексів та тенденцій на ринку, що надає детальні дані про фінансові показники компаній. Python, завдяки своїм потужним бібліотекам для веб -Spraping, є ідеальним інструментом для цього завдання. Надалі ви дізнаєтесь, як використовувати Python для збору даних з Google Finance.
Перед початком роботи переконайтеся, що Python встановлений у вашій системі. Вам також знадобляться бібліотеки: запити на виконання HTTP -чеків та LXML для розбору веб -сторінок HTML Content. Для встановлення необхідних бібліотек використовуйте такі команди командного рядка:
pip install requests
pip install lxml
Далі ми розглянемо крок -кроки процесу вилучення даних з Google Finance:
Для збору даних з Google Finance нам потрібно визначити конкретні елементи HTML, що містять інформацію, яка нас цікавить:
Ці вирази XPath необхідні для навігації та вилучення відповідних даних із структури HTML сторінок фінансів Google.
Назва:
Ціна:
Дата:
Під час налаштування скраперу важливо звернути увагу на кілька ключових аспектів, щоб забезпечити ефективність та безпеку збору даних.
Щоб отримати HTML-контрактор з веб-сайту Google Finance, ми будемо використовувати бібліотеку запитів. Це початковий крок, який дозволяє завантажувати сторінку, з якої будуть зняті дані.
Правильне налаштування HTTP-Heads, зокрема, 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.com!
Коментарі: 0