如何使用curl_cffi进行网页抓取

Anh Tuan
Data Science Expert
17-Sep-2024
什么是curl_cffi?
curl_cffi 是一个 Python 库,它使用 CFFI(C 外部函数接口)为 libcurl
库提供高效的底层绑定。这允许您以高性能和细粒度控制来执行 HTTP 请求,类似于 curl
命令行工具,但在 Python 中。它对于需要速度和高级配置的网页抓取任务特别有用。
特性:
- 高性能: 利用
libcurl
的速度来快速进行 HTTP 请求。 - 线程安全: 可安全用于多线程应用程序。
- 高级特性: 支持代理、SSL/TLS 配置、自定义标头等。
- 底层控制: 提供对请求和响应过程的详细控制。
先决条件
在深入使用 curl_cffi
之前,请确保已安装以下内容:
- Python 3.6 或更高版本
- 系统上安装了 libcurl
- 用于安装 Python 包的 pip
在 Ubuntu/Debian 系统上,您可能需要安装 libcurl
开发头文件:
bash
sudo apt-get install libcurl4-openssl-dev
开始使用curl_cffi
安装
使用 pip
安装 curl_cffi
:
bash
pip install curl_cffi
基本示例:发出 GET 请求
这是一个使用 curl_cffi
执行 GET 请求的基本示例:
python
from curl_cffi import requests
# 执行 GET 请求
response = requests.get('https://httpbin.org/get')
# 检查状态码
print(f'状态码: {response.status_code}')
# 打印响应内容
print('响应正文:', response.text)
网页抓取示例:从网站抓取引言
让我们抓取一个网页来提取信息。我们将使用 引言抓取 来获取所有引言及其作者。
python
from curl_cffi import requests
from bs4 import BeautifulSoup
# 要抓取的 URL
url = 'http://quotes.toscrape.com/'
# 执行 GET 请求
response = requests.get(url)
# 使用 BeautifulSoup 解析 HTML 内容
soup = BeautifulSoup(response.content, 'html.parser')
# 查找所有引言元素
quotes = soup.find_all('div', class_='quote')
# 提取并显示引言和作者
for quote in quotes:
text = quote.find('span', class_='text').get_text()
author = quote.find('small', class_='author').get_text()
print(f'{text} — {author}')
输出:
“我们创造的世界是我们思维的产物。如果不改变我们的思维方式,我们就无法改变这个世界。” — 阿尔伯特·爱因斯坦
“哈利,是我们自己的选择,而不是我们的能力,显示了我们真正的本质。” — J.K. 罗琳
... (其他引言)
使用 CapSolver 和 curl_cffi 处理验证码
在本节中,我们将探讨如何将 CapSolver 与 curl_cffi
集成以绕过验证码。CapSolver 是一项外部服务,可帮助解决各种类型的验证码,包括网站上常用的 ReCaptcha V2。
我们将演示如何使用 CapSolver 解决 ReCaptcha V2,然后抓取需要先解决验证码的页面的内容。
示例:使用 CapSolver 和 curl_cffi 解决 ReCaptcha V2
python
import os
import capsolver
from curl_cffi import requests
# 考虑使用环境变量存储敏感信息
capsolver.api_key = os.getenv("CAPSOLVER_API_KEY", "Your CapSolver API Key")
PAGE_URL = os.getenv("PAGE_URL", "https://example.com") # 包含验证码页面的 URL
PAGE_KEY = os.getenv("PAGE_SITE_KEY", "SITE_KEY") # 验证码的站点密钥
def solve_recaptcha_v2(url, site_key):
solution = capsolver.solve({
"type": "ReCaptchaV2TaskProxyless",
"websiteURL": url,
"websiteKey": site_key,
"proxy": PROXY
})
return solution['solution']['gRecaptchaResponse']
def main():
print("正在解决 reCaptcha V2...")
captcha_solution = solve_recaptcha_v2(PAGE_URL, PAGE_KEY)
print("验证码已解决!")
if __name__ == "__main__":
main()
注意: 将 PAGE_URL
替换为包含验证码的页面的 URL,并将 PAGE_SITE_KEY
替换为验证码的站点密钥。您可以在页面的 HTML 源代码中找到站点密钥,通常位于包含验证码小部件的 <div>
内。
使用 curl_cffi 处理代理
如果您需要通过代理路由请求,curl_cffi
使其变得非常简单:
python
from curl_cffi import requests
# 定义代理设置
proxies = {
'http': 'http://username:password@proxyserver:port',
'https': 'https://username:password@proxyserver:port',
}
# 使用代理执行 GET 请求
response = requests.get('https://httpbin.org/ip', proxies=proxies)
# 打印响应内容
print('响应正文:', response.text)
使用 curl_cffi 处理 Cookie
您可以使用 Python 的 http.cookiejar
模块中的 CookieJar
来管理 Cookie:
python
from curl_cffi import requests
from http.cookiejar import CookieJar
# 创建 CookieJar 实例
cookie_jar = CookieJar()
# 使用 Cookie jar 创建会话
session = requests.Session()
session.cookies = cookie_jar
# 执行 GET 请求
response = session.get('https://httpbin.org/cookies/set?name=value')
# 显示 Cookie
for cookie in session.cookies:
print(f'{cookie.name}: {cookie.value}')
高级用法:自定义标头和 POST 请求
您可以使用 curl_cffi
发送自定义标头和执行 POST 请求:
python
from curl_cffi import requests
# 定义自定义标头
headers = {
'User-Agent': 'Mozilla/5.0 (compatible)',
'Accept-Language': 'en-US,en;q=0.5',
}
# 要在 POST 请求中发送的数据
data = {
'username': 'testuser',
'password': 'testpass',
}
# 执行 POST 请求
response = requests.post('https://httpbin.org/post', headers=headers, data=data)
# 打印 JSON 响应
print('响应 JSON:', response.json())
奖励代码
在 CapSolver 上领取顶级验证码解决方案的奖励代码:scrape。兑换后,每次充值后您将获得额外的 5% 奖励,无限次。
结论
使用 curl_cffi
,您可以高效地执行网页抓取任务,同时对 HTTP 请求进行详细控制。将其与 CapSolver 集成,您可以绕过像 ReCaptcha V2 这样的验证码,从而访问原本难以抓取的内容。
随意扩展这些示例以满足您的特定抓取需求。始终记住尊重您抓取的网站的服务条款并遵守法律规定。
祝您抓取愉快!
合规声明: 本博客提供的信息仅供参考。CapSolver 致力于遵守所有适用的法律和法规。严禁以非法、欺诈或滥用活动使用 CapSolver 网络,任何此类行为将受到调查。我们的验证码解决方案在确保 100% 合规的同时,帮助解决公共数据爬取过程中的验证码难题。我们鼓励负责任地使用我们的服务。如需更多信息,请访问我们的服务条款和隐私政策。
更多

AI赋能的图像识别:基础知识及解决方案
告别图片验证码难题——CapSolver视觉引擎快速、智能、轻松解决!

Ethan Collins
25-Apr-2025

最佳网页抓取用户代理及使用方法
网络爬虫最佳用户代理指南及其有效使用技巧,避免被检测。探讨用户代理的重要性、类型以及如何在无缝且不被检测的情况下实现它们以进行网络爬取。

Ethan Collins
07-Mar-2025

什么是验证码?验证码可以追踪你吗?
你是否好奇验证码是什么以及为什么网站会让你解答它们?学习验证码的工作原理、它们是否会追踪你以及它们对网络安全为何至关重要。此外,了解如何使用CapSolver轻松绕过验证码以进行网页抓取和自动化。

Ethan Collins
05-Mar-2025

Cloudflare TLS指纹识别:它是啥以及如何解决
了解Cloudflare如何使用TLS指纹识别技术进行安全防护,以及它如何检测和阻止机器人,并探索针对网页抓取和自动化浏览任务的有效解决方法。

Ethan Collins
28-Feb-2025

为什么我总是被要求验证我不是机器人?
了解谷歌为何提示您验证自己不是机器人的原因,并探索使用CapSolver API高效解决验证码难题的解决方案。

Ethan Collins
27-Feb-2025

如何从受 Cloudflare 保护的网站提取数据
本指南将探讨从Cloudflare防护网站提取数据的道德和有效技术。

Ethan Collins
20-Feb-2025