如何使用 Botright 进行网络抓取

如何使用 Botright 进行网络抓取?

在本指南中,我将逐步向您介绍如何使用 Botright。我们将探讨它的最佳功能、如何安装、编写简单的代码,甚至解决那些棘手的问题。 验证码.如果你是网络搜刮的新手,也不用担心--这篇文章简单易懂,解释清晰明了。让我们深入了解,让网络搜索变得轻而易举!

什么是 Botright?

博莱特 是一个 Python 库,可帮助您搜索网站。它基于流行的浏览器自动化工具 Playwright。Botright 做了一些改动,可以帮助你避免被发现。许多网站使用验证码和其他措施来阻止机器人。Botright 可以使用内置解码器解决一些验证码问题。它还能更改浏览器指纹。这样,当网站检查您的浏览器详细信息时,就不那么像机器人了。

Botright 可运行真正的浏览器。它可以启动 Chromium 或 Firefox。该工具使用 JavaScript 加载动态内容。当网站在您滚动或与页面交互时加载数据,这就非常有用了。Botright 以异步方式运行。这意味着您可以同时执行多项任务。不过,您需要注意的是,它的 API 不是线程安全的。这意味着您在同时运行多个任务时必须小心谨慎。最好的方法是每个线程运行一个浏览器实例。

安装和设置 Botright

在开始刮削之前,您需要安装 Botright。本节将用简单的语言解释安装步骤。

先决条件

Botright 与下列 Python 版本配合使用效果最佳 3.10.如果您使用的是较新的版本,则可能需要安装较旧的版本。您可以在计算机上安装多个 Python 版本。使用虚拟环境管理 Python 版本。这样可以将您的项目分开,避免冲突。

安装步骤

使用 pip 安装 Botright:

打开终端或命令提示符。运行以下命令安装 Botright:

pip install botright

该命令还将安装 Playwright 作为依赖项。

下载浏览器二进制文件:

安装完成后,您需要下载所需的浏览器二进制文件。运行此命令:

戏剧安装

此命令将下载 Botright 将使用的浏览器。

安装专用浏览器(可选):

为了获得更好的反僵尸功能,您可以安装 Ungoogled Chromium 浏览器。这是一个注重隐私的 Chromium 版本。请从其官方网站下载并安装到系统中。如果已安装,Botright 将自动使用它。

设置项目

为你的项目创建一个新文件夹。在该文件夹中新建一个名为 scraper.py 的文件。使用任何代码编辑器,如 VS Code 或 Sublime Text。

安装好 Botright 并设置好项目文件夹后,您就可以开始编写网络搜刮程序了。

使用 Botright 构建基本的网络抓取器

在本节中,我们将编写一个简单的 scraper。我们的目标是从动态网站中提取产品信息。我们将使用 Botright 加载页面并提取数据。

步骤 1:导入图书馆

首先打开 scraper.py 文件。导入必要的库。您需要使用 asyncio 进行异步编程,使用 Botright 进行浏览器控制,使用 csv 将数据写入文件。编写以下代码:

import asyncio
import 肉芽权利
import csv

步骤 2:创建刮板功能

创建一个名为 scrape_page 的函数,将页面实例作为输入。该函数将查找页面上的所有产品元素。假设每个产品都包含在一个

类名为 "product-item"。请编写以下代码:
async def scrape_page(page):
# 选择具有产品类别的所有元素
products = await page.query_selector_all(".产品-项目")
# 创建一个列表来存储数据
产品列表 = []
# 在每个产品元素上循环
for product in 产品
# 获取产品名称、价格和图片
名称元素 = await product.query_selector(".产品名称")
price_element = await product.query_selector(".产品价格")
图像元素 = await product.query_selector("img")
# 从每个元素中提取文本或属性
名称 = await name_element.inner_text()
价格 = await price_element.inner_text()
image_url = await image_element.get_attribute("src")
# 创建包含产品数据的字典
产品数据 = {
"name": name、
"price"价格、
"图像": image_url
}
# 将数据添加到列表中
product_list.append(product_data)
# 返回完整产品列表
return 产品列表

第 3 步:将数据导出为 CSV

获取产品数据后,您需要保存数据。您可以将数据导出为 CSV 文件。添加一个将数据写入文件的函数:

def save_too_csv(data):
# 定义 CSV 文件名称
文件名 = "products.csv"
# 定义与数据键匹配的字段名称
字段名 = ["name", "price", "图像"]
# 打开 CSV 文件进行编写
with open(文件名: "w", newline="", encoding="utf-8") as csv_file:
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
# 在 CSV 中将每个产品字典写成一行
for item in 数据:
writer.writerow(item)
print("数据保存到",文件名)。

步骤 4:将所有内容整合在一起

现在,您需要创建一个函数,用于打开浏览器、加载页面并调用刮擦函数。这个函数叫做 run_scraper:

async def 运行刮板():
# 在无头模式下启动 Botright
客户 = await Botright.Botright(headless=True)
浏览器 = await client.new_browser()
# 在浏览器中打开新页面
page = await browser.new_page()
# 导航至目标网站
await page.goto("https://example.com/products")
# 调用刮板功能获取产品数据
products = await scrape_page(page)
# 将数据保存为 CSV 文件
save_too_csv(products)
# 关闭浏览器
await client.close()

最后,使用 asyncio 事件循环运行刮板:

if 姓名____ == "__主____":
asyncio.run(run_scraper())

这段代码展示了使用 Botright 进行网页抓取的一个基本示例。它加载一个页面,提取产品数据,并将其保存到 CSV 文件中。

处理无限滚动页面

许多现代网站在您向下滚动时加载数据,这种功能被称为无限滚动。Botright 可以帮助您处理这一功能。您可以对它进行编程,让它向下滚动并加载新内容,直到页面结束。

步骤 1:定义滚动功能

创建一个滚动页面的函数。该函数将滚动到底部,等待加载新内容。下面是一个示例:

async def 自动滚动(page):
last_height = 0
while True:
# 滚动到页面底部
await page.evaluate("window.scrollTo(0,document.body.scrollHeight);")
# 等待加载新内容
await page.wait_for_timeout(3000)
# 获取滚动后的新高度
new_height = await page.evaluate("document.body.scrollHeight)
# 检查页面高度是否已更改
if new_height == last_height:
# 未加载新内容;中断循环
break
last_height = new_height

第 2 步:将滚动与搜索结合起来

现在,修改 run_scraper 函数,以便在刮取之前使用滚动功能。这样可以确保所有产品都加载到页面上。

async def 无限运行():
# 在无头模式下启动 Botright
客户 = await Botright.Botright(headless=True)
浏览器 = await client.new_browser()
# 在浏览器中打开新页面
page = await browser.new_page()
# 导航至无限滚动页面
await page.goto("https://example.com/infinite-products")
# 向下滚动以加载所有内容
await 自动滚动(页面)
# 抓取已加载的页面内容
products = await scrape_page(page)
# 将搜刮到的数据保存为 CSV 文件
save_too_csv(products)
# 关闭浏览器
await client.close()
if __name__ == "__main__":
asyncio.run(run_scraper_infinite())

在这段代码中,auto_scroll 函数确保页面完全加载。然后,刮板收集所有数据。当网站不能一次性显示所有产品时,这种方法非常有用。

将数据导出为 CSV

刮擦数据后,您通常需要保存数据,以便进一步分析。CSV(逗号分隔值)是一种标准文件格式。我们已经了解了将数据保存为 CSV 的基本功能。让我们回顾一下这个过程。

  1. 收集数据: 使用 Botright 从网页中收集信息。数据通常以字典列表的形式存储。
  2. 定义 CSV 格式: 选择字段名称。在我们的例子中,我们使用了 "名称"、"价格 "和 "图像"。
  3. 写入 CSV 文件: 打开一个新的 CSV 文件。使用 Python 的 csv.DictWriter 写入文件头和行。这样,CSV 文件就可以在 Excel 等其他应用程序中使用了。

下面再次介绍完整的功能:

def save_too_csv(data):
文件名 = "products.csv"
字段名 = ["name", "price", "图像"]
with open(文件名: "w", newline="", encoding="utf-8") as csv_file:
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
for item in 数据:
writer.writerow(item)
print("数据保存到",文件名)。

使用这个简单的功能,您可以快速轻松地导出刮擦数据。

使用 Botright 绕过验证码

许多网站使用验证码来阻止机器人。Botright 包含一些可以帮助解决这些难题的功能。本节将介绍如何设置 Botright 以处理验证码。

步骤 1:编写解决验证码问题的函数

创建一个新的 Python 文件或在脚本中添加一个新函数。该函数将使用 Botright 的内置方法来解决验证码问题。在本例中,我们将使用 Google 的 reCAPTCHA 演示页面。

import asyncio
import 肉芽权利
async def solve_captcha():
# 在无头模式下启动 Botright
客户 = await Botright.Botright(headless=True)
浏览器 = await client.new_browser()
# 在浏览器中打开新页面
page = await browser.new_page()
# 导航至 reCAPTCHA 演示页面
await page.goto("https://www.google.com/recaptcha/api2/demo")
# 使用 Botright 内置方法解决验证码问题
await page.solve_recaptcha()
# 截图检查结果
await page.screenshot(path="验证码已解决.png")
# 打印一条信息以显示成功
print("验证码已解决。截图保存为 captcha_solved.png。")
# 关闭浏览器
await client.close()
if __name__ == "__main__":
asyncio.run(solve_captcha())

步骤 2:如何使用

在此代码中

  • 无头模式 Botright 以无头模式运行,因此浏览器不会打开可见窗口。这有时有助于解决验证码问题。
  • 解决验证码问题 页面对象会调用函数 solve_recaptcha()。该函数使用图像识别库来解决谜题。
  • 截图: 解决验证码问题后,系统会截图。这可以帮助您验证验证码是否已被解决。

请记住,Botright 可能无法解决每个验证码。它的成功率在 50% 到 80% 之间。更高级的验证码可能仍然会阻止您的尝试。

博特莱特的局限性

Botright 是一款功能强大的工具,但它也有一些局限性,您应该有所了解。

  • Python 版本兼容性: Botright 不支持 3.10 以下的 Python 版本。为避免冲突,您应使用 Python 3.9 或更低版本。
  • 螺纹安全: 应用程序接口不是线程安全的。当您同时运行多个刮擦任务时,必须为每个任务运行单独的浏览器实例。否则,您可能会遇到错误或死锁。
  • 先进的反僵尸系统 Botright 可以处理基本的反僵尸措施。但是,对于 Cloudflare、Akamai 等高级系统和其他高级安全服务,它就显得力不从心了。这些系统可能仍然会阻止您的请求。
  • 验证码成功率 内置验证码解码器对许多标准验证码都很有效。不过,它们可能会在 Geetest 等更复杂的谜题上失效。这意味着您的扫描任务可能不会每次都成功。

结论

因此,我们已经介绍了开始使用 Botright 进行网络搜刮所需的一切知识。我们介绍了如何安装、编写代码、处理无限滚动、导出数据和解决验证码问题。Botright 可以帮助你模仿人类用户进行网站搜刮。我们还提到了它的局限性,并介绍了替代方案。现在,你已经掌握了开始搜索项目的基础知识。您可以使用这些技能从许多不同的网站收集数据。

类似文章