




工作经历
2020-01-01 -至今深圳市长城网信息科技股份有限公司技术
集成方向,负责网络设备安全设备的调试和运维,用java和Python研发医疗软件
教育经历
2017-06-01 - 2020-06-01深圳职业技术学院计算机网络专科
技能

### **代码功能概述** 这段代码的功能是使用 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` 中关闭浏览器上下文和浏览器。
