如果您的项目涉及新闻、报告、股票报价或任何与财务管理相关的财务数据,雅虎财经仍然是数据提取的首选。截至 335 年 2024 月,其访问量超过 203 亿,与《今日美国》(154 亿)、《商业内幕》(67 亿)和彭博社(XNUMX 万)等市场上的其他老牌参与者相比,它显然处于领先地位。

雅虎财经统计

资源

准备好自动化雅虎财经数据收集了吗?本文将逐步指导您完成整个流程。我们将向您展示如何利用 Crawlbase 使用 Python API 构建强大高效的爬虫。跟着教程,你会发现它有多么简单。

试试我们 Crawling API 即可获得 1,000 个免费请求。

以下是一段关于如何从雅虎财经抓取财务数据的简短视频:

目录

四、项目范围

2. 抓取财务数据的先决条件

3. 安装依赖项

4. 抓取雅虎财经网页

5. 使用 bs4 从 Yahoo Finance HTML 中抓取标题

6. 如何抓取金融价格

7. 取消价格变动

8. 抓取雅虎财经上的市场时间状态

9. 完成雅虎财经 Scraper

10。 结论

四、项目范围

该项目的范围包括利用 Python 编程语言开发网络抓取工具, Crawlbase“ Crawling API和 BeautifulSoup 库。我们的主要目标是从托管在 雅虎财经 网站并以简洁的格式呈现信息,重点关注股票市场信息,例如公司名称、股票价格、变动和截止日期。

2. 从雅虎抓取财务数据的先决条件

作为开发人员的良好实践,我们应该始终首先讨论项目的需求。在进入实际的编码阶段之前,我们应该了解要点。以下是该项目的重要基础:

Python基础知识

由于我们将使用 Python 和 Beautifulsoup,因此您自然应该对 Python 编程语言有基本的了解。如果这是您第一次,我们鼓励您注册基础课程或至少观看视频教程并做一些基本的编码练习,然后再尝试构建自己的抓取工具。

安装了Python

如果您的系统上尚未安装 Python,请访问官方 Python网站 并下载最新版本。按照提供的安装说明在您的计算机上设置 Python。

关于 IDE

有几种适用于 Python 的集成开发环境 (IDE) 可供您用于此项目,每种 IDE 都有各自的功能和优势。您可以灵活地使用任何 IDE 与 Crawling API 或任何其他使用 HTTP 请求的 Web 服务。选择您最熟悉且最适合您的工作流程和项目要求的服务。

Crawlbase API 账户

- Crawling API 在 Crawlbase 将是本项目的核心。在开始本指南之前,请务必拥有一个帐户并获取帐户令牌,以便在进入编码阶段后能够更加顺畅地进行操作。

只需注册一个帐户并转到您的帐户文档即可获取您的代币。对于这个项目,我们将使用 JavaScript 请求令牌 抓取雅虎财经页面。

Crawlbase 账户

3. 安装依赖项

一旦安装了 Python 并且您已经确定了自己喜欢的 IDE,就可以为我们的项目安装必要的包了。在编程中,包是相关模块或类的集合,它们组织在一起以提供一组功能。包有助于将代码组织到分层命名空间中,这使得跨不同项目管理和重用代码变得更加容易。

要安装包,只需打开命令提示符 (Windows) 或终端 (macOS/Linux),创建一个要存储 Python 代码的目录,然后使用 pip 命令安装包,如下所示:

1
2
点安装爬虫库
点安装beautifulsoup4

上面的命令将安装以下内容:

Crawlbase Python库: 轻量级、无依赖的 Python 类,可作为以下对象的包装器 Crawlbase API。它本质上是一个包,因此您可以轻松集成各种 Crawlbase API 包括 Crawling API 进入您的项目。

美丽汤4: 用于网络抓取目的的 Python 库。它允许您从 HTML 和 XML 文件中提取数据,从而更轻松地解析和浏览文档的结构。 Beautiful Soup 通过将原始标记转换为可导航的解析树,提供了一个简单的界面来处理 HTML 和 XML 文档。

另外,我们将使用 JSON 模块将数据导出到 JSON 文件,它是 Python 的内置包,可用于处理 JSON 数据。

4. 爬取雅虎财经网页

现在是时候编写代码了。我们首先要编写一个代码来爬取目标网页的完整 HTML 源代码。在这一步中,我们将利用 Crawlbase 包。

首先打开您喜欢的文本编辑器或 IDE 并创建一个新的 Python 文件。为了本指南的目的,我们创建一个名为 scraper.py 从您的终端/控制台:

1
触摸刮刀.py

为了演示,我们将以此为目标 雅虎财经页面。

雅虎财经网页

复制下面的完整代码并阅读解释以理解每个部分:

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
 爬行基地 进口 抓取API

DEF (page_url、api_token):
尝试:
# 使用提供的令牌初始化 CrawlingAPI 对象
api = 爬行API({'令牌': api_token})

# 获取页面内容
响应 = api.get(page_url)

# 检查请求是否成功
if 回复['状态代码'] == 200:
# 提取数据
打印(回复[“身体”])
其他:
打印(f“错误: {回复}")


特殊课程 as e:
打印(f"爬取时发生错误: {e}")
回报 {}

if __名字__ == “__主要的__”:
# 使用来自的 JavaScript 请求令牌 Crawlbase
api_令牌= 'Crawlbase_Token'

页面网址 = 'https://finance.yahoo.com/quote/AAPL'

抓取(page_url,api_token)

抓取雅虎财经的工作原理:

我们已经导入了 CrawlingAPI crawlbase 模块中的类。此类允许与 Crawlbase 用于网络爬取目的的 API。

- crawl 函数有两个参数: page_url (要抓取的页面的 URL)和 api_token (用于验证对 Crawlbase API)。

然后代码被包装在 try 块来处理潜在的错误。如果在执行过程中出现任何错误,它们会被捕获并在 except 块。

的一个实例 CrawlingAPI 类是使用提供的 API 令牌创建的,并且 get 方法用于向指定的对象发出 GET 请求 page_url。来自 API 的响应存储在 response 变量。

该脚本还会检查响应的 HTTP 状态代码是否为 200,这表明请求成功。如果请求成功,响应正文(HTML 源代码)将打印到控制台。如果请求失败或执行过程中发生任何异常,错误消息将打印到控制台。

让我们尝试执行代码。您可以再次转到控制台并输入以下命令:

1
蟒蛇 scraper.py

如果成功,您将收到类似于以下内容的响应:

雅虎财经 HTML

5. 使用 bs4 从 Yahoo Finance HTML 中抓取标题

在本节中,我们现在将重点关注通过抓取雅虎财经网页获得的 HTML 源代码的内容。我们应该首先调用 Beautiful Soup 库来解析 HTML 并将其以 JSON 格式呈现。

1
2
从crawlbase导入CrawlingAPI
从bs4导入BeautifulSoup

接下来我们需要寻找我们想要提取的数据。搜索公司名称或 檔案/文件名称 第一的。您必须使用浏览器开发人员工具检查网页的结构,或通过突出显示标题、右键单击并选择“检查”选项来查看页面源。

雅虎财经标题

一旦获得了标题元素的行,只需使用 BeautifulSoup 选择器来提取数据即可。以下是编写代码的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
DEF 抓取数据(响应):
尝试:
# 使用 Beautiful Soup 解析 HTML 内容
汤 = BeautifulSoup(响应['身体'], 'html.parser')

# 提取所需数据
标题=汤.select_one(‘div.hdr h1’).text.strip() if 汤.select_one(‘div.hdr h1’) 其他 没有

回报 {'标题': 标题}

特殊课程 as e:
打印(f"抓取过程中发生错误: {e}")
回报 {}

该代码首先尝试解析网页的 HTML 内容。它使用 BeautifulSoup 构造函数,传递 HTML 内容 (response['body'])和解析器类型('html.parser').

里面的 try 块中,该函数尝试从解析的 HTML 中提取特定数据。它试图找到一个 <h1> 具有类名的元素 'svelte-ufs8hf' 使用 select_one 方法由美丽汤提供。

一旦找到该元素,它就会检索该元素的文本内容 <h1> 元素并将其分配给变量标题。如果 <h1> 未找到元素, title 被设置为 None.

如果出现错误,它会向控制台打印一条错误消息并返回一个空字典作为后备。

6. 如何抓取金融价格

我们要为雅虎财经网页提取的下一个相关数据是金融资产​​的最新交易价格,或者只是 行情。首先突出显示价格并检查它,如下图所示:

雅虎财经价格

编写代码来提取 Price 元素:

1
2
3
4
5
6
7
8
9
10
11
12
13
DEF 抓取数据(响应):
尝试:
# 使用 Beautiful Soup 解析 HTML 内容
汤 = BeautifulSoup(响应['身体'], 'html.parser')

# 提取所需数据
价格=汤.select_one('.livePrice[data-testid="qsp-price"]').text.strip() if 汤.select_one('.livePrice[data-testid="qsp-price"]') 其他 没有

回报 {'价格': 价格}

特殊课程 as e:
打印(f"抓取过程中发生错误: {e}")
回报 {}

与上面的代码相同,这将使我们能够从完整的 HTML 源代码中提取特定元素,并删除与我们的项目无关的任何数据。

7. 取消价格变动

我们的下一个目标数据是价格变化。该值代表金融资产(例如股票)相对于前收盘价的价格变化。

雅虎财经调整价格

再次强调,只需突出显示更改价格并获取该元素的适当选择器即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
DEF 抓取数据(响应):
尝试:
# 使用 Beautiful Soup 解析 HTML 内容
汤 = BeautifulSoup(响应['身体'], 'html.parser')

# 提取所需数据
更改 = soup.select_one('.priceChange[data-testid="qsp-price-change"]').text.strip() if 汤.select_one('.priceChange[data-testid="qsp-price-change"]') 其他 没有

回报 {'改变': 改变}

特殊课程 as e:
打印(f"抓取过程中发生错误: {e}")
回报 {}

8. 抓取雅虎财经上的市场时间戳

最后,我们还将抓取市场时间戳。它指的是计算价格的具体日期。例如,如果您看到“收盘时”后跟日期“19 年 2024 月 19 日”,则表示所提供的信息与 2024 年 XNUMX 月 XNUMX 日资产的收盘价有关。

另请注意,如果显示“开市”,则表示显示的价格是开市时资产开始交易的价格。

雅虎财经截止日期

突出显示数据并转到检查以获取关联的选择器。让我们再次编写代码以使用 BeautifulSoup 提取数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
DEF 抓取数据(响应):
尝试:
# 使用 Beautiful Soup 解析 HTML 内容
汤 = BeautifulSoup(响应['身体'], 'html.parser')

# 提取所需数据
市场时间戳 = 下页((s.文本.条带() s in 汤.选择('div[slot="marketTimeNotice"] span') if “收盘时:” in 文本 or “市场开市” in s.文本), 没有)

回报 {‘市场时间戳’: 市场时间戳}

特殊课程 as e:
打印(f"抓取过程中发生错误: {e}")
回报 {}

9. 完成雅虎财经 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
 爬行基地 进口 抓取API
bs4 进口 美丽汤
进口 JSON

DEF (page_url、api_token):
尝试:
# 使用提供的令牌初始化 CrawlingAPI 对象
api = 爬行API({'令牌': api_token})

# 获取页面内容
响应 = api.get(page_url)

# 检查请求是否成功
if 回复['状态代码'] != 200:
打印(f“错误: {回复}")
回报 {}

# 抓取的数据
scraped_data = scrape_data(响应)
打印(f'{抓取数据}')
回报 抓取的数据

特殊课程 as e:
打印(f"爬取时发生错误: {e}")
回报 {}

DEF 抓取数据(响应):
尝试:
# 使用 Beautiful Soup 解析 HTML 内容
汤 = BeautifulSoup(响应['身体'], 'html.parser')

# 提取所需数据
标题=汤.select_one(‘div.hdr h1’).text.strip() if 汤.select_one(‘div.hdr h1’) 其他 没有
价格=汤.select_one('.livePrice[data-testid="qsp-price"]').text.strip() if 汤.select_one('.livePrice[data-testid="qsp-price"]') 其他 没有
更改 = soup.select_one('.priceChange[data-testid="qsp-price-change"]').text.strip() if 汤.select_one('.priceChange[data-testid="qsp-price-change"]') 其他 没有
市场时间戳 = 下页((s.文本.条带() s in 汤.选择('div[slot="marketTimeNotice"] span') if “收盘时:” in 文本 or “市场开市” in s.文本), 没有)

回报 {'标题': 标题, '价格': 价格, '改变': 改变, ‘市场时间戳’: 市场时间戳}

特殊课程 as e:
打印(f"抓取过程中发生错误: {e}")
回报 {}

if __名字__ == “__主要的__”:
# 使用来自的 JavaScript 请求令牌 Crawlbase
api_令牌= 'Crawlbase_Token'

# 要抓取的股票列表
股票=[“苹果”, “特斯拉”, “比特币-美元”]
股票数据 = {‘股票’:[]}

库存 in 库存:
页面网址 = f'https://finance.yahoo.com/quote/{库存}'

# 调用爬取函数并将爬取的数据追加到stocks_data字典中
股票数据[‘股票’].append(爬行(page_url, api_token))

# 将抓取到的数据写入JSON文件
- open('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
{
“股票”: [
{
“标题”: “苹果公司(AAPL)”,
“价钱”: “168.99”,
“改变”: “ -3.70”,
“截止日期”: “截至美国东部时间中午 12:09。市场开放。”
},
{
“标题”: “特斯拉公司(TSLA)”,
“价钱”: “156.90”,
“改变”: “ -4.58”,
“截止日期”: “截至美国东部时间中午 12:09。市场开放。”
},
{
“标题”: “比特币美元(BTC-USD)”,
“价钱”: “61,966.21”,
“改变”: “ -2,804.80”,
“截止日期”: “截至世界标准时间下午 4:08。市场开放。”
}
]
}

就在那里。 JSON 格式响应将允许您有效地使用数据。用它来分析股票市场、比较价格等等。这是你的选择。

10。 结论

恭喜!您已经完成了关于如何使用 Python 高效构建雅虎财经数据抓取工具的全面指南。 Crawlbase API 和 BeautifulSoup。您已经学习了如何从网页中提取干净且有用的数据,并根据项目或分析对其进行自定义。

本指南中共享的代码可供所有感兴趣的人使用。我们鼓励您积极参与它,因为它对每个人都有用,包括各种开发人员、数据科学家,甚至对于好奇的学习者。您可以自由修改和定制代码以满足您的特定要求。调整它以实现自动化,从其他网站抓取数据,提取不同类型的信息,或添加新功能。

我们希望本指南能够达到其目的,并为您提供在项目中有效利用网络抓取所需的技能和工具。祝您抓取愉快,愿您的数据冒险带给您新的发现和见解!

如果您正在寻找类似的其他项目,我们还希望您检查以下内容:

如何抓取 Apartments.com

抓取 Redfin 属性数据

Playwright 网页抓取 2024 - 教程

您有什么想了解更多的吗?我们的支持团队很乐意提供帮助。请 给我们发送电子邮件。

11 常见问题解答

是的,网络抓取本身并不违法,但查看并遵守您正在抓取的网站的服务条款非常重要。与许多其他网站一样,雅虎财经可能有关于网络抓取活动的特定条款和条件。请务必熟悉这些条款以避免任何法律问题。

如何从雅虎财经抓取数据?

  1. 识别要抓取和检查网站的数据
  2. 选择抓取工具或库以从网页中提取数据
  3. 使用所选的抓取工具向目标 URL 发送 HTTP GET 请求
  4. 利用抓取工具的解析功能解析网页的HTML内容
  5. 根据您的需要,您可以将抓取的数据存储在文件、数据库或数据结构中以供以后分析或直接在应用程序中使用。

我可以使用哪些工具和库来抓取雅虎财经?

Python 中有很多可用于网页抓取的工具和库,包括 BeautifulSoup、Scrapy 和 Selenium。此外,你还可以使用以下 API: Crawlbase API 让您更轻松地访问 Web 数据。选择最适合您的项目需求和技术专长的工具或库。