Farfetch 是最大的奢侈品时尚平台之一,拥有来自全球顶级品牌的数千种高端服装、鞋子和配饰。无论您是进行市场研究、分析奢侈品时尚趋势还是建立电子商务数据库,从 Farfetch 抓取数据都非常有用。

然而,与许多其他网站一样,Farfetch 使用 JavaScript 来加载其内容,因此传统的抓取工具无法抓取您需要的零售数据。这就是 爬虫库 Crawling API 进来。它通过处理 JavaScript 内容、管理代理和绕过反机器人机制使抓取变得简单——所有这些只需用 Python 中的几行代码即可完成。

在这篇博客中,我们将使用 Crawlbase 爬取 Farfetch SERP 和产品页面 Crawling API 在Python中。

目录

  1. Farfetch 数据抓取的好处
  2. 从 Farfetch 中提取的关键数据点
  3. 爬虫库 Crawling API 用于 Farfetch 抓取
  • Crawlbase Python 库
  1. 如何设置 Python 环境
  • 安装 Python 和所需的库
  • 选择 IDE
  1. 抓取 Farfetch 搜索结果
  • 检查 HTML 中的 CSS 选择器
  • 编写搜索列表抓取工具
  • 在 Farfetch 中处理分页
  • 将数据存储在 CSV 文件中
  • 完整代码示例
  1. 抓取 Farfetch 产品页面
  • 检查 HTML 中的 CSS 选择器
  • 编写产品页面抓取工具
  • 将数据存储在 CSV 文件中
  • 完整代码示例
  1. 总结
  2. 常见问题

Farfetch 数据抓取的好处

Farfetch 是奢侈品时尚市场最大的参与者之一,它将消费者与商店和高端品牌联系起来。Farfetch 是企业、学者和开发者的宝库,拥有从高端服装到配饰的数千种产品。

Farfetch 数据抓取对提取零售信息的好处

通过抓取 Farfetch 数据,您可以了解到:

  • 定价趋势:奢侈品在不同品牌、类别和地区的定价方式。
  • 产品供货:跟踪库存水平和可用性,了解哪些商品卖得快以及哪些品牌受欢迎。
  • 市场趋势:查找时尚潮流、季节性新品以及新品牌。
  • 竞争对手分析:与竞争对手比较价格、产品描述和折扣。
  • 建立数据库:建立一个包含标题、描述、价格、图像等内容的干净的产品数据库。

从 Farfetch 中提取的关键数据点

抓取 Farfetch 数据时,请关注以下数据点:

  1. 的Blurb:简短的描述,帮助您识别产品。
  2. 品牌:追踪并识别平台上的奢侈品品牌。
  3. 价格:同时享受原价和折扣价。
  4. 产品介绍:收集有关材料和特征的信息以供编目。
  5. 尺寸和供货情况:监控库存状况和热门尺寸的需求。
  6. 类别:分析特定产品领域内的趋势。
  7. 图片:为视觉数据库提取产品图像的 URL。
  8. 评分和评论:了解顾客偏好并评估产品质量。
  9. 区域定价:比较不同货币和地区的价格。
  10. 配送方案选择:评估运输时间和成本。

通过收集这些数据点,您可以获得市场研究和业务增长的见解。现在,让我们看看如何使用 Crawlbase 抓取 Farfetch Crawling API.

爬虫库 Crawling API 用于 Farfetch 抓取

这款 爬虫库 Crawling API 是一款网络抓取工具,可轻松从 Farfetch 提取数据。它可处理 JavaScript 渲染、代理和 CAPTCHA 解析,因此您可以专注于构建抓取工具,而无需担心技术问题。

Crawlbase Python 库

Crawlbase 还拥有 Python 库 使 API 集成变得简单。一旦你 注册申请 SearchGPT 等候名单,您将收到一个用于身份验证的访问令牌。以下是如何使用它的简单示例:

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

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

DEF 获取页面内容(网址):
响应=crawling_api.get(url)

if 回复[“标题”]['pc_status'] == '200':
回报 回复['身体']。解码('utf-8')
其他:
打印(f“获取页面时出错。状态代码: {回复[“标题”]['pc_status']}")
回报 没有

关键点:

  • Crawlbase 有用于静态和动态内容抓取的单独令牌。
  • 使用 JavaScript (JS) 令牌抓取 Farfetch 动态内容。
  • 爬虫库 Crawling API 为您处理 JavaScript 渲染和代理。

如何设置 Python 环境

在开始抓取 Farfetch 数据之前,您需要设置 Python 环境。这将指导您完成安装 Python、设置所需库和选择满足您需求的 IDE 的过程。

安装 Python 和所需的库

  1. 安装Python:
  • 在MyCAD中点击 软件更新 蟒蛇网 并下载最新版本的Python。
  • 确保在安装过程中选中“将 Python 添加到 PATH”选项。
  1. 安装所需的库:
  • 打开终端或命令提示符并执行以下命令:
1
pip 安装 crawlbase beautifulsoup4
  • 这些库对于网页抓取和利用 Crawlbase 至关重要 Crawling API.

选择 IDE

要编写和管理代码,您需要一个 IDE 或代码编辑器。以下是一些选项:

  • PyCharm:具有高级调试和代码导航工具的全功能 IDE
  • Visual Studio代码:一个轻量级且可定制的编辑器,带有 Python 扩展。
  • Jupyter笔记本:用于以交互方式测试和运行代码片段。

选择适合您的 IDE,您就可以开始了。在下一节中,我们将开始抓取 Farfetch 的搜索列表。

抓取 Farfetch 搜索结果

现在您已经设置好了 Python 环境,让我们开始从 Farfetch 抓取搜索结果。本节将指导您如何检查 HTML、创建抓取工具、管理分页以及将数据保存到 CSV 文件中。

检查 HTML 结构

在编写抓取工具之前,我们需要检查 Farfetch 搜索结果的 HTML,以查找产品标题、价格和链接。在本例中,我们将使用以下 URL 中的“男士运动鞋”等类别。

1
https://www.farfetch.com/pk/shopping/men/trainers-2/items.aspx
  1. 打开开发者工具:转到 URL 并按 Ctrl + Shift + I (或 Cmd + Option + I 在 Mac 上)打开浏览器的开发人员工具。
  2. 检查产品元素:将鼠标悬停在产品标题、价格和链接上,以找到其对应的标签和 CSS 类。
抓取 HTML 结构的图像 - Farfetch 搜索列表

Farfetch 搜索列表的关键选择器:

  • 品牌:发现于 <p> 标记为 data-component="ProductCardBrandName" 属性。
  • 描述:发现于 <p> 标记为 data-component="ProductCardDescription" 属性。
  • 价格:发现于 <p> 标记为 data-component="Price" or data-component="PriceFinal" 属性。
  • 已优惠:发现于 <p> 标记为 data-component="PriceDiscount" 属性。
  • 产品链接:发现于 <a> 产品容器内的标签。 href 属性提供产品链接,前缀为 https://www.farfetch.com.

编写搜索列表抓取工具

这是一个使用以下代码抓取产品数据的 Python 脚本 CrawlbaseBeautifulSoup 图书馆:

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

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

# 用于抓取 Farfetch 搜索列表的功能
DEF scrape_farfetch_listings(网址):
选项= {
'ajax_等待': '真的', # 等待 JavaScript 加载
'页面等待': '5000' # 等待 5 秒以加载页面
}
响应=crawling_api.get(url,选项)

if 回复[“标题”]['pc_status'] == '200': # 检查 Crawlbase 状态
汤 = BeautifulSoup(响应['身体']。解码('utf-8'), “html.解析器”)
产品 = []

# 提取产品详细信息
项目 in 汤.选择('ul#catalog-grid > li[data-testid="productCard"]'):
品牌 = item.select_one('p[data-component="ProductCardBrandName"]').text.strip() if item.select_one('p[data-component="ProductCardBrandName"]') 其他 “不适用”
描述 = item.select_one('p[data-component="ProductCardDescription"]').text.strip() if item.select_one('p[data-component="ProductCardDescription"]') 其他 “不适用”
价格 = item.select_one('p[数据组件="价格"],p[数据组件="PriceFinal"]').text.strip() if item.select_one('p[数据组件="价格"],p[数据组件="PriceFinal"]') 其他 “不适用”
折扣 = item.select_one('p[data-component="价格折扣"]').text.strip() if item.select_one('p[data-component="价格折扣"]') 其他 “不适用”
链接 = item.select_one(“一种”)[“参考”] if item.select_one(“一种”) 其他 “不适用”

产品.附加({“品牌”: 品牌, “说明”: 描述, “价钱”: 价格, “折扣”: 折扣, “关联”: f“https://www.farfetch.com{关联}"})

回报 产品
其他:
打印(f"无法获取页面。Crawlbase 状态代码: {回复[“标题”]['pc_status']}")
回报 []

# 用法示例
网址= “https://www.farfetch.com/shopping/men/shoes-2/items.aspx”
产品 = scrape_farfetch_listings(url)
产品展示 in 产品:
打印(产品)

此代码定义了一个函数, scrape_farfetch_listings,从 Farfetch 搜索结果中抓取产品详细信息。它会向 Crawlbase 发送请求 Crawling API 获取 Farfetch SERP HTML。它使用 ajax_waitpage_wait Crawlbase 提供的参数 Crawling API 处理 JS 内容。您可以阅读这些参数 点击这里.

如果请求成功,该函数将使用 BeautifulSoup 解析返回的 HTML 并提取每个产品卡的产品详细信息。提取的数据作为字典存储在列表中,该函数返回产品列表。

在 Farfetch 中处理分页

Farfetch 在多个页面上列出产品。要抓取所有列表,请通过将页面参数附加到 URL 来遍历每个页面(例如, ?page=2).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DEF scrape_multiple_pages(base_url、total_pages):
所有产品 = []

in 范围(1, 总页数 + 1):
分页网址 = f"{base_url}?页面={页}"
打印(f”抓取页面: {页}")
产品 = scrape_farfetch_listings(paginated_url)
all_products.extend(产品)

回报 所有产品

# 用法示例
基本网址 = “https://www.farfetch.com/shopping/men/shoes-2/items.aspx”
all_products = scrape_multiple_pages(base_url,total_pages=5)
打印(f”抓取的产品总数: {LEN(全部产品)}")

将数据存储在 CSV 文件中

抓取后,将数据保存到 CSV 文件中以供进一步分析。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
进口 CSV

# 将数据保存到 CSV 的函数
DEF 保存到csv(数据,文件名=“farfetch_listings.csv”):
键 = 数据[0].keys()

- open(文件名,模式=“w”, 换行="", 编码=“utf-8”) as 文件:
writer = csv.DictWriter(文件,字段名称=键)
writer.writeheader()
writer.writerows(数据)

打印(f”数据保存至 {文档名称}")

# 保存爬取的数据
if 所有产品:
保存到csv(所有产品)

完整代码示例

以下是使用 Crawlbase 抓取 Farfetch 搜索列表的完整脚本 Crawling API,处理分页,并将数据保存到 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
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
 爬行基地 进口 抓取API
bs4 进口 美丽汤
进口 CSV

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

# 用于抓取 Farfetch 搜索列表的功能
DEF scrape_farfetch_listings(网址):
选项= {
'ajax_等待': '真的', # 等待 JavaScript 加载
'页面等待': '5000' # 等待 5 秒以加载页面
}
响应=crawling_api.get(url,选项)

if 回复[“标题”]['pc_status'] == '200': # 检查 Crawlbase 状态
汤 = BeautifulSoup(响应['身体']。解码('utf-8'), “html.解析器”)
产品 = []

# 提取产品详细信息
项目 in 汤.选择('ul#catalog-grid > li[data-testid="productCard"]'):
品牌 = item.select_one('p[data-component="ProductCardBrandName"]').text.strip() if item.select_one('p[data-component="ProductCardBrandName"]') 其他 “不适用”
描述 = item.select_one('p[data-component="ProductCardDescription"]').text.strip() if item.select_one('p[data-component="ProductCardDescription"]') 其他 “不适用”
价格 = item.select_one('p[数据组件="价格"],p[数据组件="PriceFinal"]').text.strip() if item.select_one('p[数据组件="价格"],p[数据组件="PriceFinal"]') 其他 “不适用”
折扣 = item.select_one('p[data-component="价格折扣"]').text.strip() if item.select_one('p[data-component="价格折扣"]') 其他 “不适用”
链接 = item.select_one(“一种”)[“参考”] if item.select_one(“一种”) 其他 “不适用”

产品.附加({“品牌”: 品牌, “说明”: 描述, “价钱”: 价格, “折扣”: 折扣, “关联”: f“https://www.farfetch.com{关联}"})

回报 产品
其他:
打印(f"无法获取页面。Crawlbase 状态代码: {回复[“标题”]['pc_status']}")
回报 []

# 抓取多个页面的函数
DEF scrape_multiple_pages(base_url、total_pages):
所有产品 = []

in 范围(1, 总页数 + 1):
分页网址 = f"{base_url}?页面={页}"
打印(f”抓取页面: {页}")
产品 = scrape_farfetch_listings(paginated_url)
all_products.extend(产品)

回报 所有产品

# 将数据保存到 CSV 的函数
DEF 保存到csv(数据,文件名=“farfetch_listings.csv”):
键 = 数据[0].keys()

- open(文件名,模式=“w”, 换行="", 编码=“utf-8”) as 文件:
writer = csv.DictWriter(文件,字段名称=键)
writer.writeheader()
writer.writerows(数据)

打印(f”数据保存至 {文档名称}")

# 抓取 Farfetch 搜索列表
基本网址 = “https://www.farfetch.com/shopping/men/shoes-2/items.aspx”
all_products = scrape_multiple_pages(base_url,total_pages=5)

# 将结果保存为 CSV
if 所有产品:
保存到csv(所有产品)

farfetch_listings.csv 文件快照:

farfetch_listings.csv 文件快照

在下一节中,我们将探讨抓取单个产品页面以获取更详细的数据。

抓取 Farfetch 产品页面

现在您已经抓取了产品列表,下一步是抓取各个产品页面以获取产品说明、尺寸、材料等。在这里,我们将向您展示如何检查 HTML、编写产品页面抓取工具以及将数据存储在 CSV 文件中。

检查 HTML 中的 CSS 选择器

访问 Farfetch 产品页面,例如:

1
https://www.farfetch.com/pk/shopping/men/gucci-screener-sneakers-item-27582236.aspx

在浏览器中打开开发人员工具(Ctrl + Shift + I or Cmd + Option + I 在 Mac 上)并检查您想要抓取的关键元素。

抓取 HTML 结构的图像 - Farfetch 产品页面

Farfetch 产品页面的关键选择器:

  • 的Blurb:位于 <p> 标记 data-testid="product-short-description".
  • 品牌:位于 <a> 标记 data-component="LinkGhostDark".
  • 价格:位于 <div> 标记 id="price".
  • 描述:位于嵌套 <div> - data-component="AccordionPanel" 位于内部 div - data-testid="product-information-accordion".

编写产品页面抓取工具

这是一个使用以下代码爬取产品详细信息的 Python 脚本 CrawlbaseBeautifulSoap:

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

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

# 使用 Crawlbase 从产品页面抓取详细信息的函数
DEF scrape_product_page(网址):
选项= {
“ajax_wait”: “真正”, # 等待 JavaScript 渲染
“页面等待”: “3000” # 等待 3 秒让页面完全加载
}
响应=crawling_api.get(url,选项)

if 回复[“标题”]['pc_status'] == '200':
汤 = BeautifulSoup(响应['身体'], “html.解析器”)

# 提取产品详细信息
blurb = soup.select_one('p[data-testid="产品简短描述"]').text.strip() if 汤.select_one('p[data-testid="产品简短描述"]') 其他 “不适用”
品牌=汤.select_one('a[数据组件="LinkGhostDark"]').text.strip() if 汤.select_one('a[数据组件="LinkGhostDark"]') 其他 “不适用”
价格=汤.select_one('div#price').text.strip() if 汤.select_one('div#price') 其他 “不适用”
描述 = soup.select_one('div[data-testid="产品信息-accordion"] div[data-component="AccordionPanel"]').text.strip() if 汤.select_one('div[data-testid="产品信息-accordion"] div[data-component="AccordionPanel"]') 其他 “不适用”

回报 {
“简介”:简介,
“品牌”: 品牌,
“价钱”: 价格,
“说明”: 描述
}
其他:
打印(f"无法获取页面。Crawlbase 状态代码: {回复[“标题”]['pc_status']}")
回报 没有

# 用法示例
网址= “https://www.farfetch.com/shopping/men/sneakers-product-12345.aspx”
产品详情 = scrape_product_page(网址)
打印(产品详情)

这款 scrape_product_page 函数向给定的 URL 发出 HTTP 请求,并提供渲染 JavaScript 的选项。然后,它使用 BeautifulSoup 解析 HTML 并提取简介、品牌、价格、描述和尺寸。数据以字典形式返回。如果请求失败,它会打印错误。

将数据存储在 CSV 文件中

抓取产品详细信息后,您可以将其保存到 CSV 文件中以便于访问。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
进口 CSV

# 将产品数据保存到 CSV 文件的功能
DEF 保存产品到csv(产品数据,文件名=“farfetch_产品详情.csv”):
键 = 产品数据.键()

# 写入标题和数据
- open(文件名,模式=“w”, 换行="", 编码=“utf-8”) as 文件:
writer = csv.DictWriter(文件,字段名称=键)
writer.writeheader()
writer.writerow(产品数据)

打印(f”产品数据保存至 {文档名称}")

# 用法示例
if 产品详情:
保存产品到csv(产品详情)

完整代码示例

以下是使用 Crawlbase 抓取 Farfetch 产品页面的完整脚本 Crawling API 并将数据保存到 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 爬行基地 进口 抓取API
bs4 进口 美丽汤
进口 CSV

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

# 使用 Crawlbase 从产品页面抓取详细信息的函数
DEF scrape_product_page(网址):
选项= {
“ajax_wait”: “真正”, # 等待 JavaScript 渲染
“页面等待”: “3000” # 等待 3 秒让页面完全加载
}
响应=crawling_api.get(url,选项)

if 回复[“标题”]['pc_status'] == '200':
汤 = BeautifulSoup(响应['身体'], “html.解析器”)

# 提取产品详细信息
blurb = soup.select_one('p[data-testid="产品简短描述"]').text.strip() if 汤.select_one('p[data-testid="产品简短描述"]') 其他 “不适用”
品牌=汤.select_one('a[数据组件="LinkGhostDark"]').text.strip() if 汤.select_one('a[数据组件="LinkGhostDark"]') 其他 “不适用”
价格=汤.select_one('div#price').text.strip() if 汤.select_one('div#price') 其他 “不适用”
描述 = soup.select_one('div[data-testid="产品信息-accordion"] div[data-component="AccordionPanel"]').text.strip() if 汤.select_one('div[data-testid="产品信息-accordion"] div[data-component="AccordionPanel"]') 其他 “不适用”

回报 {
“简介”:简介,
“品牌”: 品牌,
“价钱”: 价格,
“说明”: 描述
}
其他:
打印(f"无法获取页面。Crawlbase 状态代码: {回复[“标题”]['pc_status']}")
回报 没有

# 将产品数据保存到 CSV 文件的功能
DEF 保存产品到csv(产品数据,文件名=“farfetch_产品详情.csv”):
键 = 产品数据.键()

- open(文件名,模式=“w”, 换行="", 编码=“utf-8”) as 文件:
writer = csv.DictWriter(文件,字段名称=键)
writer.writeheader()
writer.writerow(产品数据)

打印(f”产品数据保存至 {文档名称}")

# 用法示例
产品网址 = “https://www.farfetch.com/shopping/men/sneakers-product-12345.aspx”
产品详情 = scrape_product_page(产品网址)

if 产品详情:
保存产品到csv(产品详情)

farfetch_product_details.csv 文件快照:

farfetch_product_details.csv 文件快照

总结

抓取 Farfetch 可以为你提供有价值的数据,用于市场研究、价格分析以及在时尚界保持领先地位。使用 爬虫库 Crawling API 和 BeautifulSoup 这样的库,您可以抓取产品详细信息、自动收集数据并简化您的工作流程。

但请记住尊重网站 TOS 和道德抓取。借助本博客提供的代码和指导,您可以轻松抓取 Farfetch 搜索和产品页面。想要抓取更多网站?查看我们的其他指南。

📜 如何抓取Monster.com
📜 如何抓取 Groupon
📜 如何抓取 TechCrunch 的内容
📜 如何抓取 X.com 推文页面
📜 如何抓取 Clutch.co

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

常见问题

问:抓取 Farfetch 时如何处理 JavaScript 内容?

抓取 Farfetch 等动态网站时,JavaScript 内容可能无法立即加载。使用 爬虫库 Crawling API,支持 JavaScript 渲染。这将确保在提取数据之前页面已完全加载,包括动态内容。您可以在 API 请求中将 ajax_wait 选项设置为 true,以便 JavaScript 有足够的时间渲染页面。

问:我可以从 Farfetch 上的多个页面抓取产品详情吗?

是的,您可以从 Farfetch 上的多个页面抓取产品详细信息。为此,您需要处理分页。您可以调整 URL 以包含页码参数,并循环从每个页面抓取列表。如果与 Crawlbase 一起使用 Crawling API,您就可以抓取多个页面而不必担心被禁止。

问:如何存储抓取的数据?

从 Farfetch 抓取数据后,必须以有组织的格式存储数据。您可以将数据保存在 CSV 或 JSON 文件中,以便于访问和将来使用。例如,代码可以将抓取的产品详细信息写入 CSV 文件,确保以结构化的方式保存信息,这对于分析或共享非常理想。