python playwright实战

代码功能概述

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

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

实现逻辑

1. 主函数 main
  • 功能

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

    • 调用 scrape_index 爬取列表页。
    • 调用 parse_index 解析列表页,获取详情页链接。
    • 调用 process_detail 并发爬取详情页。
    • 调用 retry_failed_urls 重试失败的详情页。
      在这里插入图片描述

2. 通用爬取函数 scrape_page
  • 功能

    • 打开指定的 URL,并等待页面加载完成。
    • 显式等待指定的元素加载完成。
  • 调用逻辑

    • scrape_indexscrape_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_selectorquery_selector_all 获取页面元素。
    • 使用 text_content() 提取文本内容,并使用 strip() 去除多余的空格和换行符。
  • 调用逻辑

    • process_detail 调用,用于解析详情页并返回电影信息。

7. 处理详情页 process_detail
  • 功能

    • 使用信号量限制并发数。
    • 调用 scrape_detail 加载详情页。
    • 调用 parse_detail 提取详情页数据。
    • 捕获异常并记录失败的 URL。
  • 调用逻辑

    • mainretry_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 中关闭浏览器上下文和浏览器。

总结

  • 核心功能

    • 爬取列表页,获取详情页链接。
    • 并发爬取详情页,提取电影信息。
    • 支持失败重试,确保数据完整性。
  • 并发控制

    • 使用 asyncio.Semaphore 限制并发数,避免过高的并发导致资源耗尽。
  • 异常处理

    • 捕获请求异常,记录失败的 URL,并在后续重试。
  • 代码结构清晰

    • 各个功能模块分离,便于扩展和维护。

源码请移至链接:https://download.csdn.net/download/xingyuzhongxuan/90571181

有网络运维、网络设备安全设备调试需求,以及python爬虫需求可以私信我或联系邮箱2452916129@qq.com

### Playwright 实战项目示例教程 #### 使用Playwright进行UI自动化测试实例 为了展示如何利用Playwright实现具体的UI自动化任务,这里提供了一个简单的例子——模拟用户登录过程。此过程中不仅涉及页面元素定位还包含了交互动作如点击按钮以及输入文本。 ```python from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=False) # 启动浏览器, headless设为False以便观察操作流程 page = browser.new_page() try: page.goto('https://example.com/login') # 替换为目标网站的实际URL # 定位并填充用户名字段 username_input = 'input[name="username"]' page.fill(username_input, "your_username") # 定位并填充密码字段 password_input = 'input[type="password"]' page.fill(password_input, "your_password") # 找到登录按钮并点击它 login_button_selector = '.login-button' page.click(login_button_selector) # 等待一段时间让页面加载完成(可根据实际情况调整) page.wait_for_timeout(3000) print("Login successful!") finally: browser.close() ``` 上述脚本展示了基本的登录逻辑[^1]。通过这种方式可以很容易扩展至更复杂的场景比如处理验证码验证或是多因素认证等问题。 #### 数据抓取应用案例分析 另一个有趣的实践方向是从网页中提取有价值的信息。例如,在`MediaCrawler`项目里提到过的一个具体应用场景就是从Bilibili这样的社交平台上收集视频下方用户的评论内容[^2]。这类任务通常涉及到解析HTML结构找到目标节点,并将其内部的文字或者其他属性值抽取出来存储起来供进一步分析使用。 对于此类需求,Playwright提供了强大的API用于遍历DOM树、获取特定标签的内容甚至可以直接调用JavaScript函数来辅助完成某些特殊的数据采集工作。值得注意的是由于网络请求可能受到反爬机制的影响所以在编写相应代码之前应当充分了解目标站点的服务条款以免违反规定造成不必要的麻烦。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xingyuzhongxuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值