雅虎财经是追踪股价、财经新闻和公司数据的热门平台之一。它拥有超过 335 亿月活跃用户,是一个结构化、有价值的信息来源。 实时财务数据.

在本指南中,您将学习如何使用 Python 从 Yahoo Finance 中提取数据,以及避免反机器人措施的最佳实践。

TL; DR:

  • 学习如何使用 Python 抓取雅虎财经数据 Crawlbase Crawling API.
  • 涵盖股票价格、价格变化和市场时间戳提取。
  • 包含完整的示例代码和 Crawlbase 集成技巧。

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

目录

1. 你需要的工具(Python + Crawlbase)

2. 如何抓取雅虎财经网页

3. 使用 BeautifulSoup 提取页面标题

4. 从雅虎财经抓取股票价格

5. 抓取价格变化(上涨/下跌)指标

6. 获取市场时间戳

7. 完整的 Python 代码:Yahoo Finance Scraper

8. 最后的想法和下一步

9. 常见问题 (FAQ)

1. 抓取雅虎财经数据所需的工具(Python + Crawlbase)

一旦 Python 安装完成后,你也确定了自己喜欢的 IDE,接下来就可以安装抓取雅虎财经数据所需的工具了。以下命令将安装 Crawlbase Python 库和 Beautifulsoup4

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

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

2. 如何抓取雅虎财经网页

现在是时候编写代码了。我们首先要编写一个代码来爬取目标网页的完整 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)

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

1
蟒蛇 scraper.py

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

雅虎财经 HTML

3. 使用 BeautifulSoup 提取页面标题

在本节中,我们现在将重点关注通过抓取雅虎财经网页获得的 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.

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

4. 从雅虎财经抓取股票价格

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

雅虎财经价格

编写代码来提取 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 源代码中提取特定元素,并删除与我们的项目无关的任何数据。

5. 抓取价格变化(上涨/下跌)指标

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

雅虎财经调整价格

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

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}")
回报 {}

6. 获取市场时间戳

最后,我们还将抓取市场时间戳。它指的是计算价格的具体日期。例如,如果您看到“收盘时”后跟日期“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.文本.条带() HPMC胶囊 s in 汤.选择('div[slot="marketTimeNotice"] span') if “收盘时:” in 文本 or “市场开市” in s.文本), 没有)

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

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

7. 完整的 Python 代码:Yahoo Finance 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.文本.条带() HPMC胶囊 s in 汤.选择('div[slot="marketTimeNotice"] span') if “收盘时:” in 文本 or “市场开市” in s.文本), 没有)

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

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

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

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

HPMC胶囊 库存 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 格式响应将允许您有效地使用数据。用它来分析股票市场、比较价格等等。这是你的选择。

8. 最后的想法和下一步

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

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

我们建议与 Crawlbase Crawling API,用于处理 IP 轮换、验证码和渲染。

9. 常见问题 (FAQ)

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

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

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

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

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