基于Pydoll的网络抓取

Pydoll是一个基于Python的浏览器自动化库,它简化了网络爬虫和网络自动化,原生支持Cloudflare绕过和代理轮转。

基于Pydoll的网络抓取

在这篇文章中,我将向你展示如何开始使用Pydoll,处理基于JavaScript的网站,并通过轮转代理扩展你的抓取。让我们开始吧!

1、Pydoll是什么?

Pydoll是一个基于Python的浏览器自动化库,它简化了网络爬虫和网络自动化。与传统的网络爬虫工具不同,这些工具依赖于浏览器驱动程序(如Selenium的WebDriver),Pydoll通过DevTools协议直接连接到基于Chromium的浏览器。这消除了对外部依赖的需求,减少了设置复杂性,并避免了与驱动程序不匹配相关的问题。

Pydoll于2025年初首次发布,由于其独特的功能和能力,迅速获得了广泛欢迎,使其成为开发人员应对现代网络爬虫挑战的可靠选择。

Pydoll的关键特性:

  • 零Web驱动程序:消除了对浏览器驱动程序的需求,避免了版本兼容性问题。
  • 异步优先架构:基于asyncio实现高并发性和低内存使用。
  • 人性化交互:模拟真实的鼠标移动、输入和点击以避免被检测。
  • 多浏览器支持:适用于Chrome、Edge和其他基于Chromium的浏览器。
  • 原生Cloudflare绕过:可以自动绕过Cloudflare的反机器人保护
  • 代理支持:支持IP轮换和地理位置目标使用代理。

2、安装和设置Pydoll

在开始之前,请确保您的计算机上安装了Python 3+。如果尚未安装,请从python.org下载并按照安装说明操作。

2.1 创建项目目录

首先创建一个新目录用于您的项目。打开终端或命令提示符并运行以下命令:

mkdir pydoll-scraper  
cd pydoll-scraper

2.2 设置虚拟环境

在Python项目中使用虚拟环境是一个好习惯,以避免与其他Python库发生冲突。要设置虚拟环境,请运行以下命令:

python -m venv venv

激活虚拟环境:

在macOS/Linux上:

source venv/bin/activate

在Windows上:

venv/Scripts/activate

2.3 安装Pydoll

现在环境已经设置好了,通过运行以下命令安装Pydoll:

pip install pydoll-python

3、从动态网站抓取数据

现在,我们将使用Pydoll从使用JavaScript加载内容的动态网站抓取数据。

3.1 导入Pydoll并设置浏览器

在您的scraper.py文件中,首先导入必要的库并初始化Pydoll:

import asyncio  
from pydoll.browser.chrome import Chrome  
from pydoll.constants import By  
import csv  
async def main():  
async with Chrome() as browser:  
await browser.start()  
page = await browser.get_page()  
# 导航和抓取逻辑在这里

3.2 导航到网站

让我们从一个名为“Quotes to Scrape”的网站抓取数据。该站点使用JavaScript动态加载报价,传统抓取工具无法处理。

你可以使用以下代码访问该站点:

await page.go_to("https://quotes.toscrape.com/js-delayed/?delay=2000")

3.3 等待元素加载

由于此页面上的内容是延迟渲染的,因此需要等待元素加载。Pydoll有一个名为wait_element的方法来处理这种情况:

await page.wait_element(By.CSS_SELECTOR, ".quote", timeout=3)

这将确保在抓取报价之前加载它们。

3.4 提取数据

现在元素已经加载完毕,我们可以提取数据。我们可以循环遍历所有报价元素并提取文本、作者和标签:

quotes = []  
quote_elements = await page.find_elements(By.CSS_SELECTOR, ".quote")  
for quote_element in quote_elements:  
text_element = await quote_element.find_element(By.CSS_SELECTOR, ".text")  
text = (await text_element.get_element_text()).replace(""", "").replace(""", "")  
author_element = await quote_element.find_element(By.CSS_SELECTOR, ".author")  
author = await author_element.get_element_text()  
tag_elements = await quote_element.find_elements(By.CSS_SELECTOR, ".tag")  
tags = [await tag_element.get_element_text() for tag_element in tag_elements]  
quote = {  
"text": text,  
"author": author,  
"tags": tags  
}  
quotes.append(quote)

3.5 将数据保存到CSV文件

最后,将抓取的数据导出到CSV文件:

with open("quotes.csv", "w", newline="", encoding="utf-8") as csvfile:  
fieldnames = ["text", "author", "tags"]  
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)  
writer.writeheader()  
for quote in quotes:  
writer.writerow(quote)

4、使用Pydoll绕过Cloudflare

Cloudflare是一种流行的Web应用程序防火墙,许多网站使用它来防止机器人。如果您正在抓取受Cloudflare保护的网站,可能会遇到CAPTCHA或其他挑战。

Pydoll提供了一种简单的方法来绕过Cloudflare的反机器人保护:

4.1 上下文管理器方法

使用Pydoll绕过Cloudflare的最简单方法,是使用上下文管理器 expect_and_bypass_cloudflare_captcha()

async with page.expect_and_bypass_cloudflare_captcha():  
await page.go_to("https://www.scrapingcourse.com/antibot-challenge")

这会自动处理CAPTCHA并允许抓取器继续。

4.2 后台处理方法

如果你不想在解决CAPTCHA时阻塞脚本,可以使用后台处理方法:

await page.enable_auto_solve_cloudflare_captcha()  
# 在后台解决CAPTCHA的同时抓取页面  
await page.go_to("https://www.scrapingcourse.com/antibot-challenge")  
# 完成后禁用CAPTCHA解决  
await page.disable_auto_solve_cloudflare_captcha()

5、将轮转代理与Bright Data集成

为了避免被网站服务器阻止,你可以使用轮转代理。Bright Data(前身为Luminati)提供了一个庞大且可靠的代理网络。

如何使用Bright Data代理

注册Bright Data帐户,登录仪表板并获取你的代理凭据。一旦有了这些凭据,你可以配置Pydoll使用这些代理:

await page.set_proxy({  
"host": "brd.superproxy.io",  
"port": 33335,  
"username": "your_username",  
"password": "your_password"  
})

使用轮转代理可确保每个请求都来自不同的IP地址,从而防止你的抓取器被阻止。

6、Pydoll的限制

虽然Pydoll是一个强大的工具,但了解其局限性很重要:

  • 速率限制:即使有代理,如果你请求得太快,仍然可能受到速率限制。重要的是实施策略,例如在请求之间随机化延迟。
  • CAPTCHA:虽然Pydoll可以绕过Cloudflare,但它可能并不总是适用于每种类型的CAPTCHA。因此,我建议你查看最佳CAPTCHA解决工具列表(全部经过测试!)。
  • 兼容性:Pydoll专为基于Chromium的浏览器设计,因此可能不适用于所有网页,特别是那些需要非Chromium浏览器的网页。

7、Pydoll的替代品

如果Pydoll不符合你的需求,可以探索以下几种替代方案:

  • Selenium:最受欢迎的网络爬虫工具,提供完整的浏览器自动化。它支持所有浏览器,但需要浏览器驱动程序。
  • Playwright:Selenium的现代替代品,旨在提高速度和可靠性,支持Chromium、Firefox和WebKit。
  • Scrapy:一个功能强大的Python框架,适用于大规模网络爬虫,但默认情况下不处理JavaScript繁重的站点。

8、结束语

Pydoll是2025年简化网络爬虫的强大工具。其异步架构、处理JavaScript繁重网站的能力以及内置的Cloudflare绕过功能使其成为现代抓取任务的绝佳选择。按照这个逐步指南,您可以轻松设置并部署一个网络爬虫来从动态网站收集数据并克服常见的挑战,如IP阻止和CAPTCHA。

请始终记住遵守网络爬虫的法律和道德考虑,并使用轮转代理和延迟来避免压垮目标服务器。愉快地抓取!


原文链接:Web Scraping With Pydoll in 2025

汇智网翻译整理,转载请标明出处