从 OpenSea 抓取数据非常有用,尤其是如果你对近几年风靡一时的 NFT(非同质化代币)感兴趣的话。NFT 是独一无二的数字资产,包括艺术品、收藏品、虚拟商品,这些资产都基于区块链技术。作为最大的 NFT 市场之一,OpenSea 拥有数百万个跨类别的 NFT,因此对于收藏家、投资者和开发者来说,这是一个不错的选择。无论你是在追踪趋势、价格还是特定的收藏品,拥有这些数据都是宝贵的。

但 OpenSea 使用 JavaScript 来加载其大部分数据,因此传统的抓取方式行不通。这就是 Crawlbase 的作用所在 Crawling API 它可以处理 JavaScript 密集型页面,因此它是抓取 OpenSea 数据的完美解决方案。

在本文中,我们将向您展示如何使用 Python 和 爬虫库 Crawling API。 让我们开始吧!

以下是有关如何在 Opensea 网站上抓取 NFT 数据的简短详细教程:

目录

  1. 为什么要从 OpenSea 抓取 NFT 数据?
  2. 您可以从 OpenSea 提取哪些数据?
  3. OpenSea 使用 Crawlbase 进行爬取 Crawling API
  4. 设置 Python 环境
  • 安装 Python 和所需的库
  • 选择 IDE
  1. 爬取 OpenSea 收藏页面
  • 检查 HTML 中的 CSS 选择器
  • 编写收藏页面抓取工具
  • 处理集合页面中的分页
  • 将数据存储在 CSV 文件中
  • 完整代码示例
  1. 抓取 OpenSea NFT 详情页面
  • 检查 HTML 中的 CSS 选择器
  • 编写 NFT 详细信息页面抓取工具
  • 将数据存储在 CSV 文件中
  • 完整代码示例
  1. 总结
  2. 常见问题

为什么要从 OpenSea 抓取 NFT 数据?

抓取 OpenSea 可以帮助您跟踪和分析有价值的 NFT 数据,包括价格、交易量和所有权信息。无论您是 NFT 收藏家、构建 NFT 相关工具的开发人员,还是希望了解市场趋势的投资者,从 OpenSea 提取数据都可以让您获得做出明智决策所需的见解。

以下是抓取 OpenSea 数据很重要的一些原因:

一张图说明了从 OpenSea 抓取 NFT 数据的原因
  1. 追踪 NFT 价格:监控单个 NFT 价格或整个系列的长期价格
  2. 分析交易量:根据销售量和交易量了解某些 NFT 的需求情况。
  3. 发现趋势:实时了解最热门的 NFT 收藏品和代币。
  4. 监控 NFT 所有者:抓取所有权数据以查看谁拥有特定的 NFT 或钱包拥有多少个代币。
  5. 自动化数据收集:您无需手动检查 OpenSea,而是可以自动收集数据并将其保存为 CSV 或 JSON 等不同格式。

OpenSea 的网站使用 JavaScript 渲染,因此抓取它可能比较棘手。但有了 Crawlbase Crawling API,您可以轻松地处理这个问题并提取数据。

您可以从 OpenSea 提取哪些数据?

在抓取 OpenSea 数据时,了解要关注哪些数据非常重要。该平台拥有大量有关 NFT(非同质化代币)的信息,提取正确的数据将帮助您跟踪性能、分析趋势和做出决策。以下是要提取的内容:

从 OpenSea 中提取的关键数据点图像
  1. NFT名称:每个 NFT 都有其独特的名称,往往蕴含着品牌或收藏情感。
  2. 馆藏名称:单个 NFT 所属的 NFT 集合。集合通常代表 NFT 的集合或系列。
  3. 价格:NFT 上市价格。这对于了解市场趋势和确定 NFT 的价值非常重要。
  4. 最后售价:NFT 之前的售价。它提供了 NFT 市场表现的历史记录。
  5. 所有者:NFT 的现任持有者(通常是钱包地址)。
  6. 创造者:NFT 的艺术家或创作者。创作者信息对于追踪出处和原创性非常重要。
  7. 业主数量:一些 NFT 有多个所有者,这表明代币的持有范围有多广泛。
  8. 稀有度/属性:许多 NFT 都具有使其独特且更受欢迎的特征。
  9. 交易量:NFT 或整个收藏品的销售和转让总量。
  10. 令牌 ID:区块链上 NFT 的唯一标识符,可用于跨平台追踪特定代币。

OpenSea 使用 Crawlbase 进行爬取 Crawling API

- 爬虫库 Crawling API 使 OpenSea 数据抓取变得简单。由于 OpenSea 使用 JavaScript 加载其内容,因此传统的抓取方法将失败。但 Crawlbase API 的工作方式就像一个真正的浏览器,因此您可以获取所需的所有数据。

为什么使用 Crawlbase Crawling API 对于 OpenSea

  1. 处理动态内容: 爬行基地 Crawling API 可以处理 JavaScript 密集型页面,并确保仅在所有 NFT 数据(价格、所有权)公开后才进行抓取。
  2. IP旋转:为了防止被 OpenSea 的安全机制封锁,Crawlbase 会轮换 IP 地址。因此,您可以抓取多个页面,而不必担心速率限制或禁令。
  3. 快速的性能:Crawlbase 可以快速高效地抓取大量数据,尤其是当您拥有许多 NFT 和收藏品时,可以节省您的时间。
  4. 可定制的请求:您可以调整标头、cookie 和其他参数以满足您的抓取需求并获取您想要的数据。
  5. 基于滚动的分页:Crawlbase 支持基于滚动的分页,因此您可以在收藏页面上获得更多项目,而无需手动点击每个页面。

Crawlbase Python 库

Crawlbase 还拥有 蟒蛇库 使用它,您可以轻松地将 Crawlbase 产品应用到您的项目中。您需要一个访问令牌,您可以通过注册 Crawlbase 来获取该令牌。

以下是向 Crawlbase 发送请求的示例 Crawling API:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 爬行基地 进口 抓取API

# 使用您的访问令牌初始化 Crawlbase API
爬行 API = 爬行 API({'令牌': 'CRAWLBASE_JS_TOKEN'})

DEF make_crawlbase_request(网址):
响应=crawling_api.get(url)

if 回复[“标题”]['pc_status'] == '200':
html_内容=响应['身体']。解码('utf-8')
回报 html_内容
其他:
打印(f"无法获取页面。Crawlbase 状态代码: {回复[“标题”]['pc_status']}")
回报 没有

备注:Crawlbase 提供两种类型的令牌:用于静态站点的普通令牌和用于动态或浏览器呈现内容的 JavaScript (JS) 令牌,这对于抓取 OpenSea 必不可少。Crawlbase 还提供 1,000 个免费请求来帮助您入门,并且您无需信用卡即可注册。有关更多详细信息,请查看 爬虫库 Crawling API 文件.

在下一部分中,我们将设置您的 Python 环境以有效地抓取 OpenSea。

设置 Python 环境

在从 OpenSea 抓取数据之前,您需要设置 Python 环境。此设置将确保您拥有所有必要的工具和库,以使抓取过程顺畅而高效。操作方法如下:

安装 Python 和所需的库

安装Python:从下载 Python 官方网站 并按照安装说明进行操作。确保在安装过程中选中“将 Python 添加到 PATH”。

设置虚拟环境 (可选但推荐):这可以使您的项目井然有序。在终端中运行以下命令:

1
2
3
4
5
cd 你的项目目录
python -m venv venv
venv\脚本\激活 # 窗口
# 要么
资源 venv/bin/激活 #macOS/Linux

安装所需的库:运行以下命令安装必要的库:

1
pip 安装 beautifulsoap4 crawlbase pandas
  • beautifulsoap4:用于从 HTML 解析和提取数据。
  • 爬行基地:使用 Crawlbase Crawling API.
  • 大熊猫:用于处理和保存 CSV 格式的数据。

选择 IDE

选择集成开发环境 (IDE) 来编写代码。热门选项包括:

现在您的 Python 环境已设置完毕,您可以开始抓取 OpenSea 集合页面。在下一节中,我们将检查 HTML 中的 CSS 选择器。

爬取 OpenSea 收藏页面

在本节中,我们将从 OpenSea 抓取收藏页面。收藏页面显示按特定类别或主题分组的各种 NFT。为了有效地完成此操作,我们将执行以下步骤:

检查 HTML 中的 CSS 选择器

在编写抓取工具之前,我们需要了解 OpenSea 集合页面上的 HTML 结构。以下是如何找到 CSS 选择器:

  1. 打开收藏页面:前往 OpenSea 网站并导航到任意收集页面。
  2. 检查页面:右键单击页面并选择“检查”或按 Ctrl + Shift + I 打开开发者工具。
OpenSea 收藏页面 HTML 检查
  1. 查找相关元素:查找包含 NFT 详细信息的元素。常见数据点包括:
  • 檔案/文件名称:在 <span> - data-testid="ItemCardFooter-name".
  • 价格:位于 <div> - data-testid="ItemCardPrice",特别是在嵌套的 <span> - data-id="TextBody".
  • 图片网址:在 <img> 标签中的图像源 src 属性。
  • 链接:NFT 详细信息页面链接位于 <a> 带有类的标签 Asset--anchor.

编写收藏页面抓取工具

现在我们有了 CSS 选择器,我们可以编写爬虫了。我们将使用 Crawlbase Crawling API 使用其来处理 JavaScript 渲染 ajax_waitpage_wait 参数。以下是爬虫的实现:

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
 爬行基地 进口 抓取API
进口 大熊猫 as pd

# 使用您的访问令牌初始化 Crawlbase API
爬行 API = 爬行 API({'令牌': 'CRAWLBASE_JS_TOKEN'})

DEF make_crawlbase_request(网址):
选项= {
'ajax_等待': '真的',
'页面等待': '5000'
}

响应=crawling_api.get(url,选项)

if 回复[“标题”]['pc_status'] == '200':
html_内容=响应['身体']。解码('utf-8')
回报 html_内容
其他:
打印(f"无法获取页面。Crawlbase 状态代码: {回复[“标题”]['pc_status']}")
回报 没有

DEF scrape_opensea_collection(html_内容):
汤 = BeautifulSoup(html_content, 'html.parser')
数据 = []

# 查找收藏中的所有 NFT 物品
nft_items = soup.select('div.Asset--已加载 > article.AssetSearchList--资产')

项目 in nft_items:
标题 = 项目.select_one('span[data-testid="ItemCardFooter-name"]').text.strip() if item.select_one('span[data-testid="ItemCardFooter-name"]') 其他 ''
价格 = item.select_one('div[data-testid="ItemCardPrice"] span[data-id="TextBody"]').text.strip() if item.select_one('div[data-testid="ItemCardPrice"] span[data-id="TextBody"]') 其他 ''
图像 = 项目.select_one('img')['源代码'] if item.select_one('img') 其他 ''
链接 = item.select_one('a.资产--锚点')['href'] if item.select_one('a.资产--锚点') 其他 ''

# 将提取的数据添加到列表中
数据.附加({
'标题': 标题,
'价格': 价格,
'图片网址': 图像,
'关联': f“https://opensea.io{关联}" # 构建完整 URL
})

回报 data

在这里我们初始化 Crawlbase Crawling API 并创建一个功能 make_crawlbase_request 获取收藏页面。该函数等待所有 AJAX 请求完成,并等待 5 秒钟让页面完全呈现,然后再将 HTML 传递给 scrape_opensea_collection 功能。

In scrape_opensea_collection,我们使用 BeautifulSoup 解析 HTML,并使用我们之前定义的 CSS 选择器提取有关每个 NFT 物品的详细信息。我们获取每个 NFT 的标题、价格、图片 URL 和链接,并将其存储在返回给调用者的列表中。

处理集合页面中的分页

OpenSea 使用基于滚动的分页,因此当您向下滚动页面时会加载更多项目。我们可以使用 scrollscroll_interval 参数。这样我们就不需要明确管理分页了。

1
2
3
4
5
选项= {
'ajax_等待': '真的',
'滚动': '真的',
'滚动间隔': '20' # 滚动 20 秒
}

这将使爬虫滚动 20 秒,以便我们获得更多项目。

将数据存储在 CSV 文件中

抓取数据后,我们可以将其存储在 CSV 文件中。这是一种常见格式,以后很容易分析。方法如下:

1
2
3
4
DEF 保存数据到csv(数据,文件名=‘opensea_数据.csv’):
df = pd.DataFrame(数据)
df.to_csv(文件名,索引=)
打印(f”数据保存至 {文档名称}")

完整代码示例

以下是包含所有步骤的完整代码:

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
 爬行基地 进口 抓取API
进口 大熊猫 as pd
bs4 进口 美丽汤

# 使用您的访问令牌初始化 Crawlbase API
爬行 API = 爬行 API({'令牌': 'CRAWLBASE_JS_TOKEN'})

DEF make_crawlbase_request(网址):
选项= {
'ajax_等待': '真的',
'滚动': '真的',
'滚动间隔': '20' # 滚动 20 秒
}

响应=crawling_api.get(url,选项)

if 回复[“标题”]['pc_status'] == '200':
html_内容=响应['身体']。解码('utf-8')
回报 html_内容
其他:
打印(f"无法获取页面。Crawlbase 状态代码: {回复[“标题”]['pc_status']}")
回报 没有

DEF scrape_opensea_collection(html_内容):
汤 = BeautifulSoup(html_content, 'html.parser')
数据 = []

# 查找收藏中的所有 NFT 物品
nft_items = soup.select('div.Asset--已加载 > article.AssetSearchList--资产')

项目 in nft_items:
标题 = 项目.select_one('span[data-testid="ItemCardFooter-name"]').text.strip() if item.select_one('span[data-testid="ItemCardFooter-name"]') 其他 ''
价格 = item.select_one('div[data-testid="ItemCardPrice"] span[data-id="TextBody"]').text.strip() if item.select_one('div[data-testid="ItemCardPrice"] span[data-id="TextBody"]') 其他 ''
图像 = 项目.select_one('img')['源代码'] if item.select_one('img') 其他 ''
链接 = item.select_one('a.资产--锚点')['href'] if item.select_one('a.资产--锚点') 其他 ''

# 将提取的数据添加到列表中
数据.附加({
'标题': 标题,
'价格': 价格,
'图片网址': 图像,
'关联': f“https://opensea.io{关联}" # 构建完整 URL
})

回报 data

DEF 保存数据到csv(数据,文件名=‘opensea_数据.csv’):
df = pd.DataFrame(数据)
df.to_csv(文件名,索引=)
打印(f”数据保存至 {文档名称}")

if __名字__ == “__主要的__”:
网址= “https://opensea.io/collection/courtyard-nft”
html_content = make_crawlbase_request(网址)

if html_内容:
数据=scrape_opensea_collection(html_content) # 从 HTML 内容中提取数据
保存数据到csv(数据)

opensea_data.csv 快照:

opensea_data.csv 文件快照

抓取 OpenSea NFT 详情页面

在本节中,我们将学习如何在 OpenSea 上抓取 NFT 详细信息页面。每个 NFT 都有自己的详细信息页面,其中包含更多信息,例如标题、描述、价格历史记录和其他详细信息。我们将遵循以下步骤:

检查 HTML 中的 CSS 选择器

在编写抓取工具之前,我们需要找到 NFT 详细信息页面的 HTML 结构。操作方法如下:

  1. 打开 NFT 详细信息页面:前往 OpenSea 并打开任意 NFT 详情页面。
  2. 检查页面:右键单击页面并选择“检查”或按 Ctrl + Shift + I 打开开发者工具。
OpenSea NFT 详细信息页面 HTML 检查
  1. 找到关键元素:搜索包含 NFT 详细信息的元素。以下是要查找的常见数据点:
  • 檔案/文件名称:在 <h1> 用类标记 item--title.
  • 描述:在 <div> 用类标记 item--description.
  • 价格:在 <div> 用类标记 Price--amount.
  • 图片网址:在 <img> 标签里面 <div> 有课 media-container.
  • NFT 页面链接:NFT 详情页面的当前 URL。

编写 NFT 详细信息页面抓取工具

现在我们有了 CSS 选择器,我们可以编写爬虫了。我们将使用 Crawlbase Crawling API 呈现 JavaScript。以下是如何从 NFT 详细信息页面抓取数据的示例:

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
 爬行基地 进口 抓取API
bs4 进口 美丽汤
进口 大熊猫 as pd

# 使用您的访问令牌初始化 Crawlbase API
爬行 API = 爬行 API({'令牌': 'CRAWLBASE_JS_TOKEN'})

DEF make_crawlbase_request(网址):
选项= {
'ajax_等待': '真的',
'页面等待': '5000'
}

响应=crawling_api.get(url,选项)

if 回复[“标题”]['pc_status'] == '200':
html_内容=响应['身体']。解码('utf-8')
回报 html_内容
其他:
打印(f“无法获取NFT详细信息页面。Crawlbase状态代码: {回复[“标题”]['pc_status']}")
回报 没有

DEF scrape_opensea_nft_detail(html_内容,网址):
汤 = BeautifulSoup(html_content, 'html.parser')

标题=汤.select_one(‘h1.item--标题’).text.strip() if 汤.select_one(‘h1.item--标题’) 其他 ''
描述 = soup.select_one(‘div.item--描述’).text.strip() if 汤.select_one(‘div.item--描述’) 其他 ''
价格=汤.select_one(‘div.价格--金额’).text.strip() if 汤.select_one(‘div.价格--金额’) 其他 ''
图像_url = [img['源代码'] IMG in 汤.选择(‘div.media-container img’)]
链接 = 网址 # 链接是当前的 URL

nft_数据 = {
'标题': 标题,
'描述': 描述,
'价格': 价格,
'图片网址':图片网址,
'关联': 关联
}

回报 nft_数据

将数据存储在 CSV 文件中

一旦我们抓取了 NFT 详细信息,我们就可以将它们保存在 CSV 文件中。这使我们能够稍后轻松分析数据。操作方法如下:

1
2
3
4
DEF 保存_nft_data_to_csv(数据,文件名='opensea_nft_data.csv'):
df = pd.DataFrame([数据]) # 将单个 NFT 数据字典转换为 DataFrame
df.to_csv(文件名,索引=)
打印(f”NFT 数据保存至 {文档名称}")

完整代码示例

以下是抓取 NFT 详细信息页面的所有步骤的完整代码:

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
 爬行基地 进口 抓取API
bs4 进口 美丽汤
进口 大熊猫 as pd

# 使用您的访问令牌初始化 Crawlbase API
爬行 API = 爬行 API({'令牌': 'CRAWLBASE_JS_TOKEN'})

DEF make_crawlbase_request(网址):
选项= {
'ajax_等待': '真的',
'页面等待': '5000'
}

响应=crawling_api.get(url,选项)

if 回复[“标题”]['pc_status'] == '200':
html_内容=响应['身体']。解码('utf-8')
回报 html_内容
其他:
打印(f“无法获取NFT详细信息页面。Crawlbase状态代码: {回复[“标题”]['pc_status']}")
回报 没有

DEF scrape_opensea_nft_detail(html_内容,网址):
汤 = BeautifulSoup(html_content, 'html.parser')

标题=汤.select_one(‘h1.item--标题’).text.strip() if 汤.select_one(‘h1.item--标题’) 其他 ''
描述 = soup.select_one(‘div.item--描述’).text.strip() if 汤.select_one(‘div.item--描述’) 其他 ''
价格=汤.select_one(‘div.价格--金额’).text.strip() if 汤.select_one(‘div.价格--金额’) 其他 ''
图像_url = [img['源代码'] IMG in 汤.选择(‘div.media-container img’)]
链接 = 网址 # 链接是当前的 URL

nft_数据 = {
'标题': 标题,
'描述': 描述,
'价格': 价格,
'图片网址':图片网址,
'关联': 关联
}

回报 nft_数据

DEF 保存_nft_data_to_csv(数据,文件名='opensea_nft_data.csv'):
df = pd.DataFrame([数据]) # 将单个 NFT 数据字典转换为 DataFrame
df.to_csv(文件名,索引=)
打印(f”NFT 数据保存至 {文档名称}")

# 用法示例
if __名字__ == “__主要的__”:
nft_url = "https://opensea.io/assets/matic/0x251be3a17af4892035c37ebf5890f4a4d889dcad/94953658332979117398233379364809351909803379308836092246404100025584049123386"
html_content = make_crawlbase_request(nft_url)

if html_内容:
nft_data = scrape_opensea_nft_detail(html_content,nft_url) # 从 HTML 内容中提取数据
保存_nft_data_to_csv(nft_data) # 将 NFT 数据保存为 CSV

opensea_nft_data.csv 快照:

opensea_nft_data.csv 文件快照

优化 OpenSea NFT 数据抓取

抓取 OpenSea 可以打开一个全新的 NFT 和市场数据世界。在这篇博客中,我们介绍了如何使用 Python 抓取 OpenSea 以及 爬虫库 Crawling API通过了解网站的布局并使用正确的工具,您可以获得有价值的见解,同时牢记道德规范。

当您深入研究抓取项目时,请记住将数据存储为人类可读的格式(例如 CSV 文件),以便轻松进行分析。NFT 领域发展迅速,了解新趋势和技术将有助于您最大限度地利用数据收集工作。有了正确的心态和工具,您就可以在 NFT 市场中找到一些很棒的见解。

如果您想进行更多网页抓取,请查看我们关于抓取其他主要网站内容的指南。

📜 如何抓取Monster.com
📜 如何抓取 Groupon
📜 如何抓取 TechCrunch 的内容
📜 如何抓取 Clutch.co

如果你有任何疑问或想提供反馈,我们的 支持团队 可以帮助您进行网页抓取。祝您抓取愉快!

常见问题

问:为什么我应该从 OpenSea 进行网络抓取?

网络抓取是一种自动从网站提取数据的方法。通过抓取 OpenSea,您可以获取有关 NFT 的重要信息,例如其价格、描述和图像。这些数据可帮助您分析市场趋势、跟踪特定收藏品或比较不同 NFT 的价格。总体而言,网络抓取提供了有价值的见解,可以增强您对 NFT 市场的了解。

在合法性方面,网络抓取是一个灰色地带。许多网站(包括 OpenSea)都允许收集数据用于个人用途,但在开始之前请务必阅读服务条款。确保您的抓取活动符合网站的政策和版权法。合乎道德的抓取意味着负责任地使用数据,而不是淹没网站的服务器。

问:我需要什么工具来开始抓取 OpenSea?

要开始抓取 OpenSea,您需要一些工具。安装 Python 和 BeautifulSoup 和 pandas 等库,用于数据解析和操作。您还将使用 爬虫库 Crawling API 处理 OpenSea 上的动态内容和 JavaScript 渲染。有了这些工具,您就可以抓取和分析 NFT 数据了。