Playwright爬虫产品系统

我要开发同款
z7sz2025年04月06日
146阅读

技术信息

语言技术
Python
参考价格
1

作品详情

功能介绍

### **代码功能概述**

这段代码的功能是使用 Playwright 框架爬取一个动态渲染的电影信息网站,分为以下几个步骤:

1. 爬取列表页,获取每部电影的详情页链接。
2. 爬取详情页,提取电影的详细信息(如名称、类型、评分等)。
3. 支持并发爬取,限制最大并发数。
4. 对爬取失败的详情页链接进行重试。

---

### **实现逻辑**

#### **1. 主函数 `main`**

- **功能**:
- 启动浏览器,创建上下文和标签页。
- 调用爬取列表页的函数,获取所有详情页链接。
- 并发爬取详情页数据。
- 对失败的详情页链接进行重试。
- 关闭浏览器上下文和浏览器。

- **调用逻辑**:
- 调用 `scrape_index` 爬取列表页。
- 调用 `parse_index` 解析列表页,获取详情页链接。
- 调用 `process_detail` 并发爬取详情页。
- 调用 `retry_failed_urls` 重试失败的详情页。

---

#### **2. 通用爬取函数 `scrape_page`**

- **功能**:
- 打开指定的 URL,并等待页面加载完成。
- 显式等待指定的元素加载完成。

- **调用逻辑**:
- 被 `scrape_index` 和 `scrape_detail` 调用,用于通用的页面加载和等待。

---

#### **3. 爬取列表页 `scrape_index`**

- **功能**:
- 根据页码构造列表页 URL。
- 调用 `scrape_page` 打开列表页并等待加载完成。

- **调用逻辑**:
- 被 `main` 调用,用于爬取每一页的电影列表。

---

#### **4. 解析列表页 `parse_index`**

- **功能**:
- 从列表页中提取每部电影的详情页链接。
- 使用 `query_selector_all` 获取所有电影链接的元素。
- 使用 `get_attribute('href')` 获取链接地址,并拼接为完整的 URL。

- **调用逻辑**:
- 被 `main` 调用,用于解析列表页并返回详情页链接列表。

---

#### **5. 爬取详情页 `scrape_detail`**

- **功能**:
- 打开详情页 URL,并等待页面加载完成。
- 调用 `scrape_page` 实现通用的页面加载和等待。

- **调用逻辑**:
- 被 `process_detail` 调用,用于加载详情页。

---

#### **6. 解析详情页 `parse_detail`**

- **功能**:
- 从详情页中提取电影的详细信息,包括名称、类型、评分、描述和上映地区。
- 使用 `query_selector` 和 `query_selector_all` 获取页面元素。
- 使用 `text_content()` 提取文本内容,并使用 `strip()` 去除多余的空格和换行符。

- **调用逻辑**:
- 被 `process_detail` 调用,用于解析详情页并返回电影信息。

---

#### **7. 处理详情页 `process_detail`**

- **功能**:
- 使用信号量限制并发数。
- 调用 `scrape_detail` 加载详情页。
- 调用 `parse_detail` 提取详情页数据。
- 捕获异常并记录失败的 URL。

- **调用逻辑**:
- 被 `main` 和 `retry_failed_urls` 调用,用于并发处理详情页。

---

#### **8. 重试失败的详情页 `retry_failed_urls`**

- **功能**:
- 对爬取失败的详情页链接重新尝试爬取。
- 调用 `process_detail` 重新处理失败的链接。

- **调用逻辑**:
- 被 `main` 调用,用于处理失败的详情页链接。

---

### **函数调用关系图**

```
main
├── scrape_index
│ └── scrape_page
├── parse_index
├── process_detail
│ ├── scrape_detail
│ │ └── scrape_page
│ └── parse_detail
└── retry_failed_urls
└── process_detail
```

---

### **代码执行流程**

1. **启动浏览器**:
- 在 `main` 中启动浏览器,创建上下文和标签页。

2. **爬取列表页**:
- 调用 `scrape_index` 打开每一页的列表页。
- 调用 `parse_index` 提取每页的详情页链接。

3. **爬取详情页**:
- 调用 `process_detail` 并发爬取详情页。
- 在 `process_detail` 中调用 `scrape_detail` 加载详情页,并调用 `parse_detail` 提取数据。

4. **处理失败的详情页**:
- 调用 `retry_failed_urls` 对失败的详情页链接重新爬取。

5. **关闭浏览器**:
- 在 `main` 中关闭浏览器上下文和浏览器。

示例图片

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论