Os investidores e analistas de hoje estão usando as informações de financiamento do Google, pois são atuais e precisas. O Google Finance parece ser o local mais preferido para ter dados financeiros atuais de todos os tipos, especialmente para ações, juntamente com índices e tendências de mercado, pois fornecem mais detalhes sobre as métricas financeiras das empresas. O Python é o melhor idioma para raspar a web. Esta postagem o ajudará a aprender a coletar dados do Google Finance, para que você possa ter todas as ferramentas de análise financeira necessárias.
Antes de começar, verifique se você está instalado no seu sistema. Você também precisará das bibliotecas: solicitações para fazer solicitações HTTP e LXML para analisar o conteúdo HTML das páginas da Web. Para instalar as bibliotecas necessárias, use os seguintes comandos na linha de comando:
pip install requests
pip install lxml
Em seguida, exploraremos o processo passo a passo de extrair dados do Google Finance:
Para raspar dados do Google Finance, precisamos identificar os elementos HTML específicos que contêm as informações em que estamos interessados:
Essas expressões XPath servirão como nosso guia para navegar e extrair os dados relevantes da estrutura HTML das páginas do Google Finance.
Título:
Preço:
Data:
Ao configurar um raspador, é crucial se concentrar em vários aspectos importantes para garantir a coleta de dados eficiente e segura.
Para buscar conteúdo HTML no site do Google Finance, empregaremos a biblioteca de solicitações. Esta etapa inicia o processo carregando a página da web da qual pretendemos extrair dados.
É realmente importante usar os cabeçalhos certos ao raspar a web, principalmente o cabeçalho agente do usuário. O uso de cabeçalhos é essencial para simular uma solicitação de navegador genuína que impedirá que o site identifique e interrompa seu script automático. Eles garantem que o servidor responda corretamente, fornecendo informações relevantes sobre a solicitação. Na ausência de cabeçalhos adequados, a solicitação pode ser negada ou o servidor pode retornar conteúdo completamente diferente ou entregar conteúdo em partes que podem restringir a atividade de raspagem da Web. Portanto, a configuração de cabeçalhos ajuda a manter o acesso ao site e garante que o raspador recupere os dados corretos.
import requests
# Defina os cabeçalhos para imitar uma visita ao navegador e evite ser bloqueado pelo servidor
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', # Não rastreie o cabeçalho da solicitação
'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',
}
# Defina o URL da página de finanças do Google para o BNP Paribas (Ticker BNP) no Euronext Paris (EPA) Exchange
url = "https://www.google.com/finance/quote/BNP:EPA?hl=en"
# Faça o http receber solicitação para o URL com os cabeçalhos especificados
response = requests.get(url, headers=headers)
Ao raspar o Google Finance ou qualquer site em escala, é crucial usar proxies. Aqui está o porquê:
# Defina as configurações de proxy
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'https://your_proxy_address:port',
}
# Faça o http receber solicitação para o URL com os cabeçalhos e proxies especificados
response = requests.get(url, headers=headers, proxies=proxies)
Depois de buscar o conteúdo HTML, precisamos analisá -lo usando a biblioteca LXML. Isso nos permitirá navegar pela estrutura HTML e extrair os dados de que precisamos:
A função FromString do lxml.html é importada para analisar o conteúdo HTML em um objeto de elemento. O método do FromString analisa a resposta.Text, o HTML bruto da página da web buscada anteriormente e retorna um objeto de elemento armazenado na variável do analisador, representando a raiz da árvore HTML analisada.
from lxml.html import fromstring
# Analise o conteúdo HTML da resposta usando o método de String do LXML
parser = fromstring(response.text)
Agora, vamos extrair dados específicos usando expressões XPath da árvore HTML analisada:
O título recupera o título do instrumento financeiro do HTML analisado. O preço recupera o preço atual das ações. A data recupera a data. O dicionário Finance_Data contém o título, preço e data extraídos. Este dicionário é anexado a uma lista.
# Lista para armazenar dados de saída
finance_data_list = []
# Extraindo o título do instrumento financeiro
title = parser.xpath('//div[@class="zzDege"]/text()')[0]
# Extraindo o preço atual do estoque
price = parser.xpath('//div[@class="YMlKec fxKbKc"]/text()')[0]
# Extraindo a data
date = parser.xpath('//div[@class="ygUjEc"]/text()')[0]
# Criando um dicionário para armazenar os dados extraídos
finance_data = {
'title': title,
'price': price,
'date': date
}
# Anexando dados para FINANCE_DATA_LIST
finance_data_list.append(finance_data)
Para lidar com os dados raspados, convém processá -los ou armazená -los em um formato estruturado como JSON:
A variável output_file especifica o nome do arquivo JSON, onde os dados serão salvos (FINANCE_DATA.JSON). O Open (output_file, 'W') abre o arquivo no modo de gravação, e JSON.DUMP (FINANCE_DATA_LIST, F, Indent = 4) grava o Finance_Data_List no arquivo com indentação de 4 espaço para legibilidade.
# Salvar Finance_Data_List em um arquivo JSON
output_file = 'finance_data.json'
with open(output_file, 'w') as f:
json.dump(finance_data_list, f, indent=4)
Ao raspar dados de sites, é importante lidar com exceções de solicitação, a fim de garantir a confiabilidade e a robustez do seu script de raspagem. Essas solicitações podem falhar por vários motivos, como problemas de rede, erros de servidor ou tempo limite. A biblioteca de solicitações em Python fornece uma maneira de lidar efetivamente a esses tipos de exceções, como mostrado abaixo:
try:
# Enviando uma solicitação de get para o URL
response = requests.get(url)
# Levante um httperror para respostas ruins (códigos de status 4xx ou 5xx)
response.raise_for_status()
except requests.exceptions.HTTPError as e:
# Lidar com erros HTTP (como 404, 500, etc.)
print(f"HTTP error occurred: {e}")
except requests.exceptions.RequestException as e:
# Lidar com outras exceções que possam ocorrer durante o pedido
print(f"An error occurred: {e}")
O bloco de tentativa envolve o código que pode aumentar as exceções. O requests.get (URL) envia uma solicitação GET. O Response.Raise_For_Status () verifica o código de status da resposta e aumenta um httperror para obter códigos malsucedidos. O exceto solicitações.Exceptions.httperror como e: captura exceções httperror e imprime a mensagem de erro. O exceto solicitações.Exceptions.RequestException como e: captura outras exceções (por exemplo, erros de rede, tempo limite) e imprime a mensagem de erro.
Agora, vamos integrar tudo para criar nossa função de raspador que busca, analisa e extrai dados de vários URLs do 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()
# Lista de URLs para raspar
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"
]
# Defina cabeçalhos para imitar uma visita ao navegador
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',
}
# Definir terminal de proxy
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'https://your_proxy_address:port',
}
# Lista para armazenar dados raspados
finance_data_list = []
# Itera através de cada URL e raspar dados
for url in urls:
try:
# Enviando uma solicitação de get para o URL
response = requests.get(url, headers=headers, proxies=proxies, verify=False)
# Levante um httperror para respostas ruins (códigos de status 4xx ou 5xx)
response.raise_for_status()
# Analise o conteúdo HTML da resposta usando o método de String do LXML
parser = fromstring(response.text)
# Extraindo o título, preço e data
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]
# Armazenar dados extraídos em um dicionário
finance_data = {
'title': title,
'price': price,
'date': date
}
# Anexar o dicionário noto a lista
finance_data_list.append(finance_data)
except requests.exceptions.HTTPError as e:
# Lidar com erros HTTP (como 404, 500, etc.)
print(f"HTTP error occurred for URL {url}: {e}")
except requests.exceptions.RequestException as e:
# Lidar com outras exceções que possam ocorrer durante o pedido
print(f"An error occurred for URL {url}: {e}")
# Salvar Finance_Data_List em um arquivo 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}")
Saída:
Este guia oferece um tutorial abrangente sobre a eliminação de dados do Google Finance usando o Python, juntamente com bibliotecas poderosas como `lxml` e` solicitações`. Ele estabelece as bases para a criação de ferramentas sofisticadas para raspagem de dados financeiros, que podem ser utilizados para realizar análises de mercado detalhadas, monitorar atividades de concorrentes ou apoiar as decisões de investimento informadas.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Comentários: 0