在网络世界中,信息确实很有价值,就像黄金一样,而抓取 Etsy 的产品列表就是为工匠和购物者利用这种价值。 它可以帮助人们做出明智的决定并保持领先地位。 如果您有在线商店、进行市场研究或喜欢处理数字,网络抓取是一个很好的工具。 它就像一个超级有用的工具,可以从网站收集信息。

Etsy 是一家类似于艺术画廊的在线商店。 这里充满了手工艺者和购物者喜爱的特殊手工制品。 但从 Etsy 获取信息可能具有挑战性。 这时候网络抓取就可以发挥作用了。

本指南主要介绍 Etsy 的网络抓取产品列表。 我们将使用 Python 提取 Etsy 数据。 本指南的特别之处在于,我们将介绍 Crawlbase Crawling API,这是一个功能强大的网络抓取工具,使抓取 Etsy 变得轻而易举。

我们将逐步引导您完成该过程。 从设置您的工作区到收集您想要的数据,我们都涵盖了。 当您完成本指南时,您将具备像专业人士一样抓取 Etsy 的技能。 那么,让我们开始这个激动人心的旅程吧!

目录

  1. 开始使用 Etsy
  2. 设置您的环境
  • 安装 Python 和所需的库
  • 选择正确的开发 IDE
  • 注册 Crawlbase Crawling API 并获取 API 凭据
  1. 了解 Etsy 的网站结构
  • 分析 Etsy 搜索页面结构
  • 识别要抓取的元素
  1. Crawlbase爬取API简介
  • Crawlbase爬取API简介
  • Crawlbase 抓取 API 的优点
  • Crawlbase Python 库
  1. 抓取 Etsy 产品列表
  • 抓取 Etsy 搜索页面 HTML
  • 检查 HTML 以获取 CSS 选择器
  • 从 HTML 检索产品列表数据
  • 处理多页结果的分页
  1. 存储抓取的数据
  • 将抓取的数据存储在 CSV 文件中
  • 将抓取的数据存储在 SQLite 数据库中
  1. 总结
  2. 常见问题解答

开始使用 Etsy

Etsy 是一个全球知名的在线市场,工匠和工匠在这里展示他们独特的创作,从手工珠宝到古董家具以及介于两者之间的一切。

Etsy 搜索页面

Etsy 的产品列表为买家和卖家提供了大量信息。 作为卖家,您可以通过分析竞争对手、确定产品趋势以及对您的产品进行有竞争力的定价来更深入地了解市场。 对于买家来说,监控价格、发现独一无二的商品并做出明智的购买决定的能力将改变游戏规则。

然而,手动从 Etsy 提取和分析数据可能是一项耗时且艰巨的任务。 这就是网络抓取的作用,它可以简化流程并为您提供大量可能隐藏的数据。

在本博客中,我们将向您展示如何使用 Python 和 Crawlbase 爬取 API。 有了这些知识,您将能够自动收集数据并从 Etsy 的动态网页中获得有价值的见解,从而节省您的时间和精力。

该旅程从了解 Etsy 的网站结构和设置您的开发环境开始。

设置您的环境

在开始抓取 Etsy 产品列表之前,我们必须确保我们的设置已准备就绪。 这意味着我们需要安装所需的工具和库,选择正确的集成开发环境 (IDE),并获取重要的 API 凭据。

安装 Python 和所需的库

  • 设置环境的第一步是确保系统上安装了 Python。 如果您还没有安装Python,可以从官方网站下载: 蟒蛇网.

  • 安装 Python 后,下一步是确保您拥有该项目所需的库。 在我们的例子中,我们需要三个主要库:

    • Crawlbase Python 库:该库将用于制作 HTTP请求 使用 Crawlbase 抓取 API 访问 Etsy 搜索页面。 要安装它,您可以使用 pip 和以下命令:
    1
    点安装爬虫库
    • 美汤4:Beautiful Soup 是一个 Python 库,可以轻松地从网页中抓取和解析 HTML 内容。 它是从网络中提取数据的关键工具。 您可以使用 pip 安装它:
    1
    点安装beautifulsoup4
    • 熊猫:Pandas 是 Python 中一个强大的数据操作和分析库。 我们将用它来存储和管理抓取的数据。 使用 pip 安装 pandas:
    1
    pip 安装熊猫

选择正确的开发 IDE

集成开发环境 (IDE) 提供具有代码突出显示、自动完成和调试工具等功能的编码环境。 虽然您可以在简单的文本编辑器中编写 Python 代码,但 IDE 可以显着改善您的开发体验。

以下是一些值得考虑的流行 Python IDE:

  1. PyCharm:PyCharm 是一个强大的 IDE,具有免费的社区版。 它提供代码分析、可视化调试器和 Web 开发支持等功能。

  2. Visual Studio 代码(VS 代码):VS Code 是 Microsoft 开发的免费开源代码编辑器。 其庞大的扩展库使其能够适用于各种编程任务,包括网络抓取。

  3. Jupyter笔记本:Jupyter Notebook 非常适合交互式编码和数据探索。 它通常用于数据科学项目。

  4. Spyder的:Spyder 是一款专为科学和数据相关任务而设计的 IDE。 它提供了变量浏览器和交互式控制台等功能。

注册Crawlbase爬虫API并获取正确的Token

要使用 Crawlbase 抓取 API 向 Etsy 搜索页面发出 HTTP 请求,您需要在 抓取基地网站。 现在,让我们为您设置一个 Crawlbase 帐户。 按着这些次序:

  1. 访问 Crawlbase 网站:打开网络浏览器并导航至 Crawlbase 网站 注册 页面开始注册过程。
  2. 提供您的详细信息:系统会要求您提供电子邮件地址并为您的 Crawlbase 帐户创建密码。 填写所需信息。
  3. 企业验证:提交详细信息后,您可能需要验证您的电子邮件地址。 检查您的收件箱中是否有来自 Crawlbase 的验证电子邮件,然后按照提供的说明进行操作。
  4. 登录 :验证您的帐户后,返回 Crawlbase 网站并使用您新创建的凭据登录。
  5. 访问您的 API 令牌:您需要 API 令牌才能使用 Crawlbase 爬网 API。 您可以找到您的代币 这里。.

备注:Crawlbase 提供两种类型的令牌:用于静态网站的普通令牌(TCP)和用于动态或 JavaScript 驱动的网站的 JavaScript 令牌(JS)。 由于 Etsy 严重依赖 JavaScript 来加载动态内容,因此我们将选择 JavaScript 令牌。 为了顺利启动,Crawlbase 慷慨地提供了 1,000 个 Crawling API 免费请求的初始限额。

安装了 Python 和所需的库、设置了您选择的 IDE 并掌握了 Crawlbase API 凭据后,您就可以开始抓取 Etsy 产品列表了。 在接下来的部分中,我们将深入了解 Etsy 的网站结构并有效使用 Crawlbase 抓取 API。

了解 Etsy 的网站结构

在我们开始抓取 Etsy 的产品列表之前,牢牢掌握 Etsy 的网站结构至关重要。 了解网页的组织方式并确定要抓取的特定元素将为成功的抓取操作奠定基础。

Etsy 搜索页面的组成部分

Etsy 的搜索页面就是神奇发生的地方。 它是通往大量产品列表的门户。 但它的本质到底是什么样的呢? 让我们分解一些关键组件:

Etsy 搜索页面
  • 搜索栏:用户可以在此处输入搜索查询来查找特定项目或类别。 作为抓取工具,您可以通过发送具有不同搜索词的 HTTP 请求来自动执行搜索。
  • 搜索结果:搜索结果是页面的核心。 它们包含单独的产品列表,每个产品列表都有自己的一组信息。 了解这些列表的结构对于高效抓取至关重要。
  • 分页:Etsy 经常将搜索结果分为多个页面。 要捕获全面的数据集,您需要浏览这些页面,这是我们将在本指南中解决的挑战之一。
  • 产品列表:每个产品列表通常包含产品标题、价格、描述、卖家信息等详细信息。 这些是我们要提取的目标元素。

识别您想要刮除的元素

现在我们知道了 Etsy 的搜索页面是什么样子,让我们关注我们想要抓取的元素。 感兴趣的关键要素通常包括:

  • 产品名称:这是产品的名称或标题。 它对于识别和分类列表至关重要。
  • 价格:产品的价格对于卖家和买家来说都至关重要。 抓取价格可以进行价格趋势分析并做出明智的购买决策。
  • 产品介绍:产品描述提供了有关商品的有价值的信息,帮助潜在买家做出明智的选择。
  • 卖家信息:了解卖家是谁以及他们位于哪里对于卖家和买家都相关。 该信息对于市场分析很有价值。
  • 产品图片:图像是网上购物不可或缺的一部分。 抓取图像 URL 允许您可视化产品并在分析或应用程序中使用图像。
  • 产品评级和评论:评级和评论可以深入了解产品质量和卖家声誉。 抓取这些数据对于评估市场很有价值。

通过识别和理解这些元素,您将为制定抓取策略做好充分准备。 在接下来的部分中,我们将深入探讨使用 Python 和 Crawlbase 爬行 API 来收集这些数据的技术方面,并确保您拥有从 Etsy 的动态网站中提取有意义的见解所需的所有知识。

Crawlbase爬取API简介

Crawlbase 爬行 API 是其中之一 最好的网络爬虫工具 旨在处理复杂的网络抓取场景,例如 Etsy 的动态网页。 它提供了一种访问 Web 内容的简化方法,同时绕过 JavaScript 渲染、验证码和反抓取措施等常见挑战。

Crawlbase 爬行 API 的一个显着功能是 IP 轮换,这是一种有助于防止 IP 封锁和 CAPTCHA 挑战的技术。 经过 轮换IP地址,该 API 可确保您的网络抓取请求看起来好像来自不同位置,从而使网站检测和阻止抓取活动变得更具挑战性。

使用 Crawlbase 爬网 API,您可以向网站发送请求并接收结构化数据作为响应。 它负责渲染 JavaScript、处理动态内容以及返回准备解析的 HTML 内容。

该 API 提供了一种简单的网络抓取方法,使其成为像我们这样的项目的绝佳选择,这些项目的目标是有效地从动态网站中提取数据。

Crawlbase 抓取 API 的优点

Crawlbase 抓取 API 提供了多项优势,其中 IP 轮换在克服常见的网络抓取挑战方面发挥着重要作用:

爬取API的好处
  • JavaScript渲染:它处理严重依赖 JavaScript 呈现内容的网站。 这对于像 Etsy 这样动态内容很常见的平台来说至关重要。
  • 简化的请求:API 抽象化了处理 HTTP 请求、cookie 和会话的复杂性。 您可以专注于构建抓取逻辑,而 API 则负责处理技术细节。
  • 数据结构:您从 API 收到的数据通常结构良好,可以更轻松地解析和提取所需的信息。
  • 可扩展性:它允许通过同时处理多个请求来进行可扩展的网络抓取,这在处理大量数据时非常有利。
  • 可靠性:Crawlbase 抓取 API 旨在提供可靠的结果并提供一致的结果,这对于任何网页抓取项目都至关重要。

Crawlbase Python 库

这款 Crawlbase Python 库 是 Crawlbase API 的轻量级且无依赖的包装器,简化了网络抓取的复杂性。 这个多功能工具简化了诸如向网站发出 HTTP 请求、熟练处理 IP轮换,并优雅地穿越网络障碍,包括验证码。 要使用此库开始您的网络抓取之旅,您可以无缝地执行以下步骤:

  1. 导入模板:要使用 Crawlbase 库中强大的 Crawling API,您必须首先导入不可或缺的 CrawlingAPI 类。 这一基础步骤为访问一系列 Crawlbase API 铺平了道路。 以下是如何导入这些 API 的概览:
1
从crawlbase导入CrawlingAPI
  1. 初始化:有了您的 Crawlbase API 令牌,下一个关键步骤涉及初始化 CrawlingAPI 类。 这个关键时刻将您的代码与 Crawlbase 的巨大功能连接起来:
1
api = 爬行API({ '令牌': 'YOUR_CRAWLBASE_TOKEN' })
  1. 发送请求:一旦您的 CrawlingAPI 类准备好使用 Crawlbase API 令牌,您就可以向目标网站发送请求。 下面是一个实际示例,该示例专门设计了一个 GET 请求,用于从 Etsy 的搜索页面抓取 iPhone 列表:
1
2
3
响应 = api.get('https://www.facebook.com/BillGates')
if 回复['状态代码'] == 200:
打印(回复['身体'])

有了 Crawlbase Python 库作为您值得信赖的伴侣,您就可以自信地踏上您的网络抓取之旅。 要更深入地了解其功能,您可以探索更多详细信息 这里。.

在接下来的部分中,我们将演示如何利用 Crawlbase 抓取 API 和 Python 库来抓取 Etsy 的搜索页面、提取产品列表以及存储数据以供分析。

抓取 Etsy 产品列表

当我们的环境设置完毕并配备了 Crawlbase Crawling API 后,是时候深入了解我们的网络抓取冒险的核心了。 在本节中,我们将探讨抓取 Etsy 产品列表所涉及的步骤,从抓取 Etsy 的搜索页面 HTML 到处理多页结果的分页。

抓取 Etsy 搜索页面 HTML

该旅程从使用 Crawlbase 抓取 API 向 Etsy 的搜索页面发出请求开始。 通过向 Etsy 的搜索页面发送 HTTP 请求,我们检索该页面的原始 HTML 内容。 这是我们数据提取过程的起点。

Crawlbase 爬行 API 负责 JavaScript 渲染,确保我们收到完全加载的网页。 这是至关重要的,因为 Etsy 产品列表的许多元素都是使用 JavaScript 动态加载的。 下面是用于抓取搜索查询“clothes”的 Etsy 搜索页面 HTML 的 Python 脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 爬行基地 进口 抓取API

# 使用您的 Crawlbase API 令牌初始化 CrawlingAPI 类
api = 爬行API({ '令牌': 'YOUR_CRAWLBASE_JS_TOKEN' })

# 抓取 API 的选项
选项= {
'页面等待': 2000,
'ajax_等待': '真的'
}

# 构造请求URL
搜索网址 = 'https://www.etsy.com/search?q=clothes'

# 向 Etsy 搜索页面发出 GET 请求
响应 = api.get(search_url, 选项)

# 检查请求是否成功(状态码200)
if 回复['状态代码'] == 200:
# 解码字节数据后提取的HTML内容
搜索页面 html = 响应['身体']。解码('拉丁1')
打印(搜索页面_html)
其他:
打印(“检索页面失败。状态代码:”, 回复['状态代码'])

此 Python 代码片段演示了如何使用“crawlbase”库中的 CrawlingAPI 从 Etsy 搜索页面检索数据:

  1. 您可以使用 API 令牌初始化 CrawlingAPI 类。
  2. 您可以为抓取 API 设置一些选项,包括页面和 AJAX 等待时间。
  3. 您构建 Etsy 服装搜索页面的 URL。

使用 API 的 GET 请求,您可以获取页面的内容。 如果请求成功(状态代码 200),您可以从响应中解码 HTML 内容并抓取它。

示例输出:

输出 HTML 屏幕截图

检查 HTML 以获取 CSS 选择器

一旦我们获得了搜索页面的 HTML 内容,下一步就是检查 HTML 结构,以确定我们想要抓取的元素的 CSS 选择器。 这项任务正是 Web 开发工具和浏览器开发工具来拯救我们的地方。 让我们概述一下如何检查 HTML 结构并挖掘那些宝贵的 CSS 选择器:

检查 Etsy 搜索页面
  1. 访问网站:前往 Etsy 网站并访问您感兴趣的搜索页面。
  2. 右键单击并检查:右键单击要从中获取信息的页面元素。从出现的菜单中选择“检查”或“检查元素”。这将在您的浏览器中打开开发人员工具。
  3. 发现 HTML 源代码:在开发者工具中查找HTML源代码。将鼠标移动到代码的不同部分,网页上相应的区域就会亮起。
  4. 识别 CSS 选择器:要获取特定元素的 CSS 选择器,请在开发人员工具中右键单击该元素,然后选择“复制”>“复制选择器”。这会将 CSS 选择器复制到剪贴板上,您可以将其用于网页抓取。

有了选择器后,您就可以开始使用抓取工具从 Etsy 的搜索页面收集数据。 请记住,我们在这里讨论的选择器在我们编写本文时可以工作,但 Etsy 可能会更新他们的网站,这可能会使代码稍后停止工作。

从 HTML 检索产品列表数据

有了 CSS 选择器,我们现在可以编写 Python 代码来解析 HTML 内容并提取所需的数据。 我们将使用 Beautiful Soup(一个流行的 HTML 解析库)来遍历 HTML 并从指定元素收集信息。

例如,您可以从 HTML 内容中提取产品标题、价格、评级和其他相关详细信息。 然后,检索到的数据被结构化并可以存储以供进一步分析或处理。 让我们扩展之前的脚本并从 HTML 中抓取此信息。

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
61
62
# 导入必要的库
进口 JSON
bs4 进口 美丽汤
爬行基地 进口 抓取API

# 使用您的 Crawlbase API 令牌初始化 CrawlingAPI 类
api = 爬行API({ '令牌': 'YOUR_CRAWLBASE_JS_TOKEN' })

# 抓取 API 的选项
选项= {
'页面等待': 3000,
'ajax_等待': '真的'
}

# 定义搜索查询
搜索查询= '衣服'

# 构造请求URL
搜索网址 = f'https://www.etsy.com/search?q={搜索查询}'

尝试:
# 向 Etsy 搜索页面发出 GET 请求
响应 = api.get(search_url, 选项)

# 检查请求是否成功(状态码200)
if 回复['状态代码'] == 200:
# 解码字节数据后提取的HTML内容
搜索页面 html = 响应['身体']。解码('拉丁1')

# 使用 Beautiful Soup 解析 HTML 内容
汤= BeautifulSoup(search_page_html, 'html.parser')

# 提取产品详细信息
产品详细信息 = []

# 查找页面上所有产品容器
产品容器 = soup.select('div.search-listings-group div[数据搜索结果容器] ol li')

# 遍历每个产品容器
容器 in 产品容器:
产品 = {}

# 提取产品名称
titleElement = 容器.select_one('div.v2-listing-card__info h3.v2-listing-card__title')
产品['标题'] = titleElement.text.strip() if 标题元素 其他 ''

# 提取产品价格
价格元素 = 容器.select_one('div.n-listing-card__price p.lc-价格跨度.货币价值')
产品['价格'] = PriceElement.text.strip() if 价格元素 其他 ''

# 提取产品评分
ratingElement = 容器.select_one('div.v2-listing-card__info div.shop-name-with- rating span.larger_review_stars > div')
产品['评分'] = ratingElement.text.strip() if 评级元素 其他 ''

# 将产品详细信息添加到列表中
产品详细信息.append(产品)

# 打印或保存所有产品详细信息
打印(json.dumps(产品详细信息,缩进=2))

特殊课程 as e:
打印(f“发生错误: {e}")

然后,该脚本重点提取产品详细信息。 它通过识别和选择 HTML 结构中的所有产品容器来实现这一点。 对于每个产品容器,它都会创建一个字典来存储产品的标题、价格和评级等信息。 通过选择包含这些详细信息的特定 HTML 元素来提取此信息。

抓取的产品详细信息会聚合到一个列表中,脚本会将此列表转换为具有适当缩进的 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
[
{
“标题”: “女式基督教运动衫、母亲节宗教礼物、圣经诗篇衬衫、女式诗篇 91 衬衫、信仰 T 恤、KP6200”,
“价钱”: “13.85”,
“评分”: “4.8”
},
{
“标题”: “那是我不会去运动衫,有趣的格林奇 T 恤,格林奇衬衫,格林奇运动衫,圣诞衬衫,圣诞运动衫圣诞 T 恤”,
“价钱”: “8.49”,
“评分”: “4.8”
},
{
“标题”: “感恩 | 超柔软运动衫 | 感恩节运动衫 | 女士秋季运动衫 | 男士感恩节运动衫 | 友谊衬衫”,
“价钱”: “29.99”,
“评分”: “4.9”
},
{
“标题”: “用不同的方式说我爱你连帽衫,背面带字积极连帽衫,时尚连帽衫,审美衣服超大连帽衫,联谊会连帽衫”,
“价钱”: “27.50”,
“评分”: “4.9”
},
{
“标题”: “Gallery Dept 高街长裤、中性涂鸦休闲裤、Y2K 街头服饰、女士礼品”,
“价钱”: “59.69”,
“评分”: “4.4”
},
{
“标题”: “Halloweentown Est 1998 运动衫、Halloweentown 大学、复古万圣节运动衫、秋季运动衫、万圣节运动衫”,
“价钱”: “9.74”,
“评分”: “4.9”
},
{
“标题”: “女式背带裤连身裤、女式带口袋连身裤、波西米亚风连身裤连身裤、波西米亚服装、波西米亚服装,”,
“价钱”: “35.64”,
“评分”: “4.5”
},
{
“标题”: “定制刺绣罗马数字连帽衫,个性化情侣礼物,周年纪念礼物,棉质周年纪念,刺绣情侣连帽衫”,
“价钱”: “22.00”,
“评分”: “4.8”
},
{
“标题”: “不寻常的印花气球袖衬衫、节日上衣、节日服装、夏季服装\u00ef\u00bc\u008c给她的礼物、情侣礼物、礼物创意”,
“价钱”: “40.00”,
“评分”: “3.8”
},
{
“标题”: “天鹅绒喇叭裤、节日服装、天鹅绒喇叭裤、嬉皮风、波西米亚风、橄榄色、鳄梨色、绿色”,
“价钱”: “39.60”,
“评分”: “4.7”
},
.....
]

处理多页结果的分页

Etsy 的搜索结果通常分为多个页面,每个页面都包含一组产品列表。 为了确保我们收集全面的数据集,我们需要处理分页。 这涉及迭代结果页面并根据需要提出其他请求。 处理分页对于获得 Etsy 产品列表的完整视图并确保您的分析基于全面的数据集至关重要。 让我们更新之前的脚本来处理分页。

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
61
62
63
64
65
66
67
68
69
进口 JSON
bs4 进口 美丽汤
爬行基地 进口 抓取API

# 使用您的 Crawlbase API 令牌初始化 CrawlingAPI 类
api = 爬行API({'令牌': 'YOUR_CRAWLBASE_JS_TOKEN'})

# 抓取 API 的选项
选项= {
'页面等待': 5000,
'ajax_等待': '真的'
}

DEF 获取总页数(搜索网址):
尝试:
响应 = api.get(search_url, 选项)
if 回复['状态代码'] == 200:
搜索页面 html = 响应['身体']。解码('拉丁1')
汤= BeautifulSoup(search_page_html, 'html.parser')
总页数= INT(汤.select_one('div[data-appears-component-name="search_pagination"] nav ul.search-pagination li:nth-last-child(3) a')。文本)
回报 总页数
特殊课程 as e:
打印(f“获取总页数时发生错误: {e}")
回报 1

DEF 刮页(页面地址):
尝试:
响应 = api.get(page_url, 选项)
if 回复['状态代码'] == 200:
page_html = 响应['身体']。解码('拉丁1')
page_soup = BeautifulSoup(page_html, 'html.parser')
产品容器 = page_soup.select('div.search-listings-group div[数据搜索结果容器] ol li')
产品详细信息 = []
容器 in 产品容器:
产品 = {}
# 提取产品名称
titleElement = 容器.select_one('div.v2-listing-card__info h3.v2-listing-card__title')
产品['标题'] = titleElement.text.strip() if 标题元素 其他 ''
# 提取产品价格
价格元素 = 容器.select_one('div.n-listing-card__price p.lc-价格跨度.货币价值')
产品['价格'] = PriceElement.text.strip() if 价格元素 其他 ''
# 提取产品评分
ratingElement = 容器.select_one('div.v2-listing-card__info div.shop-name-with- rating span.larger_review_stars > div')
产品['评分'] = ratingElement.text.strip() if 评级元素 其他 ''
产品详细信息.append(产品)
回报 产品详情
特殊课程 as e:
打印(f“抓取页面时发生错误: {e}")
回报 []

DEF ():
# 定义搜索查询
搜索查询= '衣服'

# 构造第一页的请求URL
搜索网址 = f'https://www.etsy.com/search?q={搜索查询}'

总页数 = get_total_pages(search_url)
所有产品详细信息 = []

in 范围(1, 总页数 + 1):
页面网址 = f'{搜索网址}&页面={页}'
page_product_details = scrape_page(page_url)
all_product_details.extend(page_product_details)

# 根据您的需要进一步处理 all_product_details

if __名字__ == “__主要的__”:
主()

该代码通过首先确定搜索结果中的总页数,然后系统地从每个页面中抓取数据来处理分页。 这 get_total_pages 函数通过向 Etsy 搜索页面发出初始 GET 请求并解析 HTML 以提取总页数来检索总页数。 它提供了强大的错误处理功能,以确保在请求或解析失败时能够处理异常。

这款 scrape_page 函数负责从单个页面中抓取数据。 它还使用 GET 请求来获取特定页面的 HTML 内容,然后使用 BeautifulSoup 解析该内容。 产品详细信息是从页面上的产品容器中提取的,与前面的脚本类似。 它还提供错误处理来处理抓取过程中的异常。

main 函数中,代码首先通过调用确定总页数 get_total_pages,然后使用 for 循环遍历每个页面,根据页码构建每个页面的 URL。 每个页面都会调用 scrape_page 函数来提取产品详细信息,这些详细信息会被收集并附加到 all_product_details 列表。 通过对所有页面执行此操作,代码可以有效地处理分页,确保抓取和收集每个页面的数据。

处理完所有页面后,您可以进一步使用累积的页面 all_product_details 根据分析或存储需要列出。 这种方法允许从分页网站(例如 Etsy)中抓取全面的数据。

存储抓取的数据

从 Etsy 的搜索页面成功抓取数据后,下一个关键步骤是存储这些有价值的信息以供将来分析和参考。 在本节中,我们将探讨两种常见的数据存储方法:将抓取的数据保存在 CSV 文件中并将其存储在 SQLite 数据库中。 这些方法使您可以有效地组织和管理抓取的数据。

将抓取的数据存储在 CSV 文件中

CSV 是一种广泛使用的用于存储表格数据的格式。 这是一种简单且人类可读的存储结构化数据的方式,使其成为保存抓取的 Etsy 产品列表数据的绝佳选择。

我们将扩展之前的网页抓取脚本,添加使用流行的 Python 库 pandas 将抓取的数据保存到 CSV 文件中的步骤。 这是该脚本的更新版本:

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

# 使用您的 Crawlbase API 令牌初始化 CrawlingAPI 类
api = 爬行API({'令牌': 'YOUR_CRAWLBASE_JS_TOKEN'})

DEF 获取总页数(搜索网址):
# ...(之前获取总页数的代码)

DEF 刮页(页面地址):
# ...(之前抓取页面的代码)

DEF ():
# 定义搜索查询
搜索查询= '衣服'

# 构造第一页的请求URL
搜索网址 = f'https://www.etsy.com/search?q={搜索查询}'

总页数 = get_total_pages(search_url)
所有产品详细信息 = []

in 范围(1, 总页数 + 1):
页面网址 = f'{搜索网址}&页面={页}'
page_product_details = scrape_page(page_url)
all_product_details.extend(page_product_details)

# 将抓取的数据保存为 CSV 文件
df = pd.DataFrame(all_product_details)
df.to_csv('etsy_product_data.csv', 索引=)

if __名字__ == “__主要的__”:
主()

在这个更新的脚本中,我们引入了 pandas,一个强大的数据操作和分析库。 在抓取并积累产品列表详细信息后 all_product_details 列表中,我们根据该数据创建一个 pandas DataFrame。 然后,我们使用 to_csv 方法将 DataFrame 保存到当前目录中名为“etsy_product_data.csv”的 CSV 文件。 环境 index=False 确保我们不会将 DataFrame 的索引保存为 CSV 文件中的单独列。

您可以使用 pandas 轻松处理和分析抓取的数据。 该 CSV 文件可以在各种电子表格软件中打开或导入到其他数据分析工具中以进行进一步探索和可视化。

将抓取的数据存储在 SQLite 数据库中

如果您更喜欢结构化且查询友好的数据存储方法,SQLite 是一种轻量级、无服务器数据库引擎,它可能是一个不错的选择。 您可以创建数据库表来存储抓取的数据,从而实现高效的数据检索和操作。 以下是修改脚本以将数据存储在 SQLite 数据库中的方法:

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
61
62
63
64
65
进口 JSON
进口 sqlite3
bs4 进口 美丽汤
爬行基地 进口 抓取API

# 使用您的 Crawlbase API 令牌初始化 CrawlingAPI 类
api = 爬行API({'令牌': 'YOUR_CRAWLBASE_JS_TOKEN'})

DEF create_database():
conn = sqlite3.connect('etsy_products.db')
光标 = conn.cursor()
游标.执行('''如果不存在则创建表产品(
id 整数主键自动增量,
标题文本,
价格文本,
评级文本
)''')
conn.commit()
conn.close()

DEF 保存到数据库(data):
conn = sqlite3.connect('etsy_products.db')
光标 = conn.cursor()

# 根据数据创建元组列表
data_tuples = [(产品['标题'], 产品['价格'], 产品['评分']) 产品展示 in 数据]

# 将数据插入产品表中
光标.executemany('''
插入产品(标题、价格、评级)
值 (?, ?, ?)
''',数据元组)

conn.commit()
conn.close()

DEF 获取总页数(搜索网址):
# ...(不变)

DEF 刮页(页面地址):
# ...(不变)

DEF ():
# 创建数据库和产品表
创建数据库()

# 定义搜索查询
搜索查询= '衣服'

# 构造第一页的请求URL
搜索网址 = f'https://www.etsy.com/search?q={搜索查询}'

总页数 = get_total_pages(search_url)
所有产品详细信息 = []

in 范围(1, 总页数 + 1):
页面网址 = f'{搜索网址}&页面={页}'
page_product_details = scrape_page(page_url)
all_product_details.extend(page_product_details)

# 将抓取的数据插入到SQLite数据库中
保存到数据库(所有产品详细信息)

if __名字__ == “__主要的__”:
主()

在此更新的代码中,我们添加了用于创建 SQLite 数据库和表 ( create_database ) 并将抓取的数据保存到数据库 ( save_to_database ) 的函数。 create_database 函数检查数据库和表是否存在,如果不存在则创建它们。 save_to_database 函数将抓取的数据插入到“products”表中。
通过运行此代码,您将把抓取的 Etsy 产品列表数据存储在名为“etsy_products.db”的 SQLite 数据库中。 您稍后可以使用 SQL 查询检索和操作这些数据,或者在 Python 项目中以编程方式访问它。

总结

本指南提供了有效利用 Python 和 Crawlbase Crawling API 抓取 Etsy 产品列表的必要见解。 您是否应该进一步提高从其他电子商务平台提取产品信息的专业知识,例如 沃尔玛, 易趣全球速卖通,我们鼓励您查阅所提供的补充指南。

我们知道网络抓取可能会带来挑战,因此让您感受到支持非常重要。 因此,如果您需要进一步的指导或遇到任何障碍,请随时与我们联系。 我们的 敬业的团队 致力于在整个网络抓取工作中为您提供帮助。

常见问题解答

网页抓取是通过获取和解析 HTML 内容从网站中提取数据的自动化过程。 它可以成为用于多种目的的有价值的工具,包括数据分析和市场研究。

当谈到 Etsy 等平台上的网络抓取的合法性时,这取决于这种做法是否符合网站的条款和政策。 虽然网络抓取本身并不违法,但网站可能有允许或限制抓取的服务条款。 与许多在线平台一样,Etsy 也有自己的服务条款和 robots.txt 文件,其中概述了网络爬虫和抓取工具的规则。 在抓取 Etsy 时,查看并遵守这些指南至关重要。 不遵守规定可能会导致法律后果或被阻止访问该网站。

问:IP 轮换在 Crawlbase Crawling API 中如何工作,为什么它对于网页抓取至关重要?

Crawlbase 抓取 API 中的 IP 轮换涉及动态更改用于每个网页抓取请求的 IP 地址。 此过程对于成功的网络抓取至关重要,因为它有助于规避常见的挑战,例如 IP 禁令、阻止和验证码挑战。 通过不断轮换 IP 地址,API 使网站识别和阻止抓取活动变得更具挑战性。 这种主动方法可确保网络抓取操作的可靠性和成功,使您能够不受干扰或阻碍地访问和收集所需的数据。

问:抓取 Etsy 等动态网站时有哪些常见挑战,Crawlbase 爬行 API 如何解决这些挑战?

抓取像 Etsy 这样的动态网站会带来许多挑战,主要是因为这些网站严重依赖 JavaScript 来加载和显示内容。 动态内容加载可能会给传统网络抓取方法的数据提取带来挑战。 然而,Crawlbase Crawling API 是专门为有效应对这些挑战而设计的。 它通过渲染 JavaScript 来实现这一点,并提供包含“ajax_wait”或“page_wait”等查询参数的灵活性。 这些参数使您能够控制在 JavaScript 渲染后获取 HTML 的时间,确保您收到准备好解析的完全加载的网页。 通过抽象化处理 HTTP 请求、cookie 和会话的复杂性,该 API 简化了抓取代码,使其更干净、更简单。 此外,它还根据您的请求提供结构良好的数据,这显着简化了解析和提取过程,使您能够从动态网站中提取有意义的见解。

问:抓取 Etsy 产品列表时如何处理分页,为什么有必要?

有效的分页处理是网络抓取 Etsy 产品列表的一个关键方面。 Etsy 经常将搜索结果分为多个页面,以容纳大量的产品列表。 要获得包含所有相关列表的综合数据集,您必须熟练地处理分页。 这涉及系统地迭代各个结果页面并根据需要提出其他请求。 分页处理至关重要,因为它可以确保您捕获 Etsy 的完整产品列表,防止数据中出现任何遗漏或空白。 未能解决分页问题可能会导致数据不完整或不准确,从而影响抓取结果的质量和可靠性。