使用 curl_cffi 在 Python 中进行网络抓取

使用 curl_cffi 在 Python 中进行网络抓取

在这篇文章中,我将向你介绍curl_cffi,并告诉你它如何帮助你在刮擦网站时不会遇到障碍。让我们开始吧

什么是curl_cffi?

curl_cffi是一个Python库,可作为客户端执行HTTP请求。它建立在cURL Impersonate之上,cURL Impersonate是流行的cURL库的一个分支。curl_cffi的独特之处在于它能够模仿真实网络浏览器的TLS指纹。这使它能够绕过先进的僵尸检测技术,如TLS指纹识别,这是网站用来区分真实浏览器和自动僵尸的一种方法。

curl_cffi 如何工作?

curl_cffi的工作原理是在TLS握手过程中冒充真实浏览器。下面简要介绍一下该工具的工作原理:

  1. TLS 握手:在发出 HTTPS 请求时,客户端和服务器之间会进行 TLS 握手。这种握手涉及加密设置的协商,客户端会向服务器发送一个指纹,以帮助服务器识别客户端。
  2. 模仿 TLS 指纹:使用 cURL 假冒curl_cffi会修改指纹,使其与Chrome或Safari等流行浏览器的指纹相匹配。这有助于掩盖自动请求的事实。
  3. HTTP/2 握手curl_cffi:curl_cffi 还模仿了浏览器特定的 HTTP/2 握手设置,提供了进一步的隐蔽性。
  4. 可定制的配置:该库允许开发人员自定义 TLS 设置,如密码套件、支持的曲线和标头,使请求看起来像是由真实用户发出的。

🛡️ 添加住宅代理,实现隐蔽性和规模化

虽然 curl_cffi 可以帮助你模拟真实的浏览器,但将它与 布赖特数据公司的住宅代用指标 让你的抓取能力更强。这些代理会轮换来自真实设备的 IP,帮助你规避封禁和 CAPTCHA,尤其是在抓取 Walmart 这类网站或执行大规模任务时。它是实现不易被检测到并进行规模化抓取的理想组合。

使用curl_cffi进行网络抓取的分步指南

让我们通过一个实际例子来了解如何使用curl_cffi来进行网络搜索。

步骤 1:设置项目

首先建立一个 Python 环境。这将确保您可以管理依赖关系,并将您的项目与其他 Python 项目隔离。以下是设置环境的步骤:

 Python 官方网站.

为项目创建一个新目录:

mkdir curl-cffi-scraper
CD curl-cffi-scraper

在项目目录下创建虚拟环境:

python -m venv env

激活虚拟环境:

在 Windows 上:

env脚本激活

在 macOS/Linux 上

来源 env/bin/activate

步骤 2:安装 curl_cffi

激活虚拟环境后,就可以安装 curl_cffi 库了:

pip install curl-cffi

这将安装 curl_cffi 和必要的 cURL 仿冒二进制文件。

步骤 3:导入并配置 curl_cffi

现在,库已安装完毕,您可以开始编写刮擦脚本了。首先,创建一个 Python 文件(如 scraper.py)并导入必要的模块:

from curl_cffi import requests

现在,让我们向目标网页发出 GET 请求。在本例中,我们将抓取沃尔玛的产品搜索页面,搜索关键字 "键盘"。您可以使用 impersonate 参数指定请求应模仿特定浏览器:

response = requests.get("https://www.walmart.com/search?q=keyboard",冒充="铬")

这样,curl_cffi就会让请求看起来像是来自最新版本的谷歌浏览器。

步骤 4:从页面提取数据

一旦成功检索到页面,就可以解析 HTML 内容。为此,您可以使用 BeautifulSoup 库。首先,使用

pip install beautifulsoup4

现在,在你的脚本中,使用 BeautifulSoup 解析页面内容:

from bs4 import 美丽汤
soup = BeautifulSoup(response.text、 "html.parser")
让提取页面标题:
title_element = soup.find("title")
title = title_element.text
print(title)

如果搜索请求成功,将打印页面标题,如 "电子产品 - Walmart.com"。

步骤 5:运行爬虫

现在,您可以通过执行 Python 脚本来运行刮板:

python scraper。py

如果一切正常,您将在终端上看到页面标题。如果不使用 impersonate="chrome" 参数,沃尔玛很可能会显示验证码或僵尸检测页面。

curl_cffi 的高级功能

1.浏览器模拟

curl_cffi支持多个浏览器版本的冒充。你可以在请求时指定浏览器版本。下面是几个例子:

  • Chrome: impersonate="chrome"
  • 边缘: impersonate="edge101″
  • Safari: impersonate="safari17_2_ios"

这样就能密切匹配浏览器的特定 TLS 指纹,避免被检测到。

2.会话管理

curl_cffi允许你在多个请求中保持会话。这在网站需要验证或使用cookie时非常有用。下面介绍如何创建会话,并将其用于后续请求:

session = requests.Session()
session.get("https://httpbin.org/cookies/set/userId/5",冒充="铬")
print(session.cookies)

3.代理支持

curl_cffi允许你为HTTP和HTTPS请求设置代理。下面是一个例子

proxies = {"http": "http://your_proxy", "https": "https://your_proxy"}
response = requests.get("https://www.example.com",冒充="铬", proxies=proxies)

在大多数情况下,我建议使用住宅代理。您可以查看我的 最佳住宅代理 选择最适合您需求的供应商。

4.异步请求

为了同时抓取多个页面,curl_cffi通过AsyncSession支持异步请求:

from curl_cffi.requests import 异步会话
import asyncio
async def 获取数据():
async with AsyncSession() as 会话:
响应 = await session.get("https://www.example.com",冒充="铬")
print(response.text)
asyncio.run(fetch_data())

curl_cffi与其他HTTP客户端的比较

让我们将curl_cffi与一些常用的Python HTTP客户端(如requests、AIOHTTP和HTTPX)进行比较。

HTTP 客户端比较表

curl_cffi 的优势

  • TLS 指纹欺骗:不像 requests 和 AIOHTTP因此,curl_cffi 可以轻松绕过基于 TLS 指纹的僵尸检测。
  • 更快的请求curl_cffi:curl_cffi的速度比requests和HTTPX更快,因此非常适合大型刮擦任务。

结论

那么,你已经学会了如何使用 curl_cffi 在 Python 中进行网页抓取。这个库可以让你模仿真实的浏览器流量,绕过先进的反僵尸措施,如 TLS 指纹.你还会看到如何集成BeautifulSoup来进行HTML解析、处理异步请求以及管理会话和代理。无论你是初学者还是高级网络搜刮者,curl_cffi都能为你从网站中提取数据提供强大而高效的解决方案。

如果您需要更高级的功能或完全托管的刮擦服务,请考虑探索其他选项,如 Scraping Browser 或 网络抓取 API.不过,对于大多数用例来说,curl_cffi 提供了一种简单、快速、有效的方法来轻松刮擦网站。

类似文章