当今的投资者和分析师正在使用Google财务信息,因为它是最新且准确的。 Google Finance似乎是拥有所有类型的当前财务数据的最喜欢的地方,尤其是对于股票以及指数和市场趋势,因为它提供了有关公司财务指标的更多详细信息。 Python是网络刮擦的最佳语言。这篇文章将帮助您学习如何从Google Finance收集数据,以便您可以拥有所有必要的财务分析工具。
在开始之前,请确保您在系统上安装了Python。您还需要库:提出HTTP请求和LXML的请求,以解析网页的HTML内容。要安装所需的库,请在命令行上使用以下命令:
pip install requests
pip install lxml
接下来,我们将探讨从Google Finance中提取数据的分步过程:
要刮下Google Finance的数据,我们需要确定包含我们感兴趣的信息的特定HTML元素:
这些XPath表达式将作为我们从Google Finance页面的HTML结构中导航和提取相关数据的指南。
标题:
价格:
日期:
在设置刮板时,至关重要的是要专注于几个重要方面,以确保有效且安全的数据收集。
要从Google Finance网站获取HTML内容,我们将采用请求库。此步骤通过加载我们打算从中提取数据的网页来启动该过程。
网络刮擦时使用正确的标头非常重要,最著名的是用户代理标头。标题的使用对于模拟真正的浏览器请求至关重要,该请求将阻止网站识别和停止自动脚本。他们确保服务器通过提供有关请求的相关信息来正确响应。没有适当的标头,请求可能会被拒绝,或者服务器可能会返回完全不同的内容,或者在可能限制Web刮擦活动的部分中传递内容。因此,设置标头适当地有助于维持对网站的访问,并确保刮板检索正确的数据。
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', # 请勿跟踪请求标题
'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',
}
# 定义BNP Paribas(股票BNP)的Google Finance页面的URL
url = "https://www.google.com/finance/quote/BNP:EPA?hl=en"
# 用指定的标题使HTTP获取向URL的请求
response = requests.get(url, headers=headers)
在大规模刮擦Google Finance或任何网站时,使用代理至关重要。原因如下:
# 定义代理设置
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'https://your_proxy_address:port',
}
# 使用指定的标题和代理将HTTP获取到URL的请求
response = requests.get(url, headers=headers, proxies=proxies)
获取HTML内容后,我们需要使用LXML库来解析它。这将使我们能够浏览HTML结构并提取所需的数据:
从lxml.html的源功能导入将HTML内容解析为元素对象。从String方法解析响应。文本,网页中的RAW HTML,并返回存储在Parser变量中的元素对象,代表解析的HTML树的根。
from lxml.html import fromstring
# 使用LXML的string方法解析响应的HTML含量
parser = fromstring(response.text)
现在,让我们使用解析的HTML树中的XPath表达式提取特定数据:
标题从解析的HTML中检索金融工具的头衔。价格检索当前的股票价格。日期检索日期。 Finance_Data字典包含提取的标题,价格和日期。该词典附加到列表中。
# 列表以存储输出数据
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)
在从网站抓取数据时,必须处理请求异常,以确保抓取脚本的可靠性和健壮性。这些请求可能由于各种原因而失败,例如网络问题、服务器错误或超时。如下所示,Python 中的请求库提供了一种有效处理这些类型异常的方法:
try:
# 向 URL 发送 GET 请求
response = requests.get(url)
# 对不良响应(4xx 或 5xx 状态代码)引发 HTTPError
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 块封装了可能引发异常的代码。requests.get(url) 发送 GET 请求。response.raise_for_status()会检查响应状态代码,并在代码不成功时引发 HTTPError。except requests.exceptions.HTTPError as e: 捕获 HTTPError 异常并打印错误信息。except requests.exceptions.RequestException as e:捕获其他异常(如网络错误、超时)并打印错误信息。
现在,让我们整合一切,创建我们的 scraper 函数,从多个 Google Finance URL 获取、解析和提取数据:
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:
# 向 URL 发送 GET 请求
response = requests.get(url, headers=headers, proxies=proxies, verify=False)
# 对不良响应(4xx 或 5xx 状态代码)引发 HTTPError
response.raise_for_status()
# 使用 lxml 的 fromstring 方法解析响应的 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 错误(如 404、500 等)
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}")
输出:
本指南提供了使用 Python 以及 `lxml` 和 `requests` 等强大库从 Google Finance 搜刮数据的全面教程。它为创建复杂的金融数据抓取工具奠定了基础,这些工具可用于进行深入的市场分析、监控竞争对手的活动或支持明智的投资决策。
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
评论: 0