Cách sử dụng curl_cffi để trích xuất dữ liệu web

Anh Tuan
Data Science Expert
17-Sep-2024
curl_cffi là một thư viện Python cung cấp các liên kết hiệu quả, cấp thấp tới thư viện libcurl bằng cách sử dụng CFFI (C Foreign Function Interface). Điều này cho phép bạn thực hiện các yêu cầu HTTP với hiệu năng cao và khả năng kiểm soát chi tiết, tương tự như công cụ dòng lệnh curl nhưng trong Python. Nó đặc biệt hữu ích cho các tác vụ thu thập dữ liệu web đòi hỏi tốc độ và cấu hình nâng cao.
Các tính năng:
- Hiệu năng cao: Tận dụng tốc độ của
libcurlđể thực hiện các yêu cầu HTTP nhanh chóng. - An toàn luồng: An toàn khi sử dụng trong các ứng dụng đa luồng.
- Các tính năng nâng cao: Hỗ trợ proxy, cấu hình SSL/TLS, tiêu đề tùy chỉnh, và hơn thế nữa.
- Kiểm soát cấp thấp: Cung cấp khả năng kiểm soát chi tiết đối với quá trình yêu cầu và phản hồi.
Điều kiện tiên quyết
Trước khi bạn bắt đầu sử dụng curl_cffi, hãy đảm bảo rằng bạn đã cài đặt những thứ sau:
- Python 3.6 trở lên
- libcurl được cài đặt trên hệ thống của bạn
- pip để cài đặt các gói Python
Trên các hệ thống Ubuntu/Debian, bạn có thể cần cài đặt các tiêu đề phát triển libcurl:
bash
sudo apt-get install libcurl4-openssl-dev
Bắt đầu với curl_cffi
Cài đặt
Cài đặt curl_cffi bằng pip:
bash
pip install curl_cffi
Ví dụ cơ bản: Thực hiện yêu cầu GET
Đây là một ví dụ cơ bản về cách sử dụng curl_cffi để thực hiện yêu cầu GET:
python
from curl_cffi import requests
# Thực hiện yêu cầu GET
response = requests.get('https://httpbin.org/get')
# Kiểm tra mã trạng thái
print(f'Mã trạng thái: {response.status_code}')
# In nội dung phản hồi
print('Nội dung phản hồi:', response.text)
Ví dụ thu thập dữ liệu web: Thu thập trích dẫn từ một trang web
Hãy thu thập dữ liệu từ một trang web để trích xuất thông tin. Chúng ta sẽ sử dụng Quotes to Scrape để lấy tất cả các trích dẫn cùng với tác giả của chúng.
python
from curl_cffi import requests
from bs4 import BeautifulSoup
# URL để thu thập dữ liệu
url = 'http://quotes.toscrape.com/'
# Thực hiện yêu cầu GET
response = requests.get(url)
# Phân tích cú pháp nội dung HTML bằng BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')
# Tìm tất cả các phần tử trích dẫn
quotes = soup.find_all('div', class_='quote')
# Trích xuất và hiển thị các trích dẫn và tác giả
for quote in quotes:
text = quote.find('span', class_='text').get_text()
author = quote.find('small', class_='author').get_text()
print(f'{text} — {author}')
Kết quả:
“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.” — Albert Einstein
“It is our choices, Harry, that show what we truly are, far more than our abilities.” — J.K. Rowling
... (các trích dẫn khác)
Xử lý Captcha với CapSolver và curl_cffi
Trong phần này, chúng ta sẽ tìm hiểu cách tích hợp CapSolver với curl_cffi để bỏ qua captcha. CapSolver là một dịch vụ bên ngoài giúp giải quyết nhiều loại captcha khác nhau, bao gồm cả ReCaptcha V2, thường được sử dụng trên các trang web.
Chúng ta sẽ trình bày cách giải quyết ReCaptcha V2 bằng CapSolver và sau đó thu thập dữ liệu của một trang yêu cầu giải quyết captcha trước.
Ví dụ: Giải quyết ReCaptcha V2 với CapSolver và curl_cffi
python
import os
import capsolver
from curl_cffi import requests
# Cân nhắc sử dụng biến môi trường cho thông tin nhạy cảm
capsolver.api_key = os.getenv("CAPSOLVER_API_KEY", "Your CapSolver API Key")
PAGE_URL = os.getenv("PAGE_URL", "https://example.com") # URL của trang có captcha
PAGE_KEY = os.getenv("PAGE_SITE_KEY", "SITE_KEY") # Site key cho captcha
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("Đang giải quyết reCaptcha V2...")
captcha_solution = solve_recaptcha_v2(PAGE_URL, PAGE_KEY)
print("Captcha đã được giải quyết!")
if __name__ == "__main__":
main()
Lưu ý: Thay thế PAGE_URL bằng URL của trang chứa captcha và PAGE_SITE_KEY bằng site key của captcha. Bạn có thể tìm thấy site key trong mã nguồn HTML của trang, thường nằm trong <div> chứa widget captcha.
Xử lý Proxy với curl_cffi
Nếu bạn cần định tuyến các yêu cầu của mình thông qua một proxy, curl_cffi giúp bạn thực hiện điều đó một cách đơn giản:
python
from curl_cffi import requests
# Định nghĩa cài đặt proxy
proxies = {
'http': 'http://username:password@proxyserver:port',
'https': 'https://username:password@proxyserver:port',
}
# Thực hiện yêu cầu GET bằng proxy
response = requests.get('https://httpbin.org/ip', proxies=proxies)
# In nội dung phản hồi
print('Nội dung phản hồi:', response.text)
Xử lý Cookie với curl_cffi
Bạn có thể quản lý cookie bằng CookieJar từ mô-đun http.cookiejar của Python:
python
from curl_cffi import requests
from http.cookiejar import CookieJar
# Tạo một instance CookieJar
cookie_jar = CookieJar()
# Tạo một session với cookie jar
session = requests.Session()
session.cookies = cookie_jar
# Thực hiện yêu cầu GET
response = session.get('https://httpbin.org/cookies/set?name=value')
# Hiển thị các cookie
for cookie in session.cookies:
print(f'{cookie.name}: {cookie.value}')
Sử dụng nâng cao: Tiêu đề tùy chỉnh và yêu cầu POST
Bạn có thể gửi tiêu đề tùy chỉnh và thực hiện yêu cầu POST với curl_cffi:
python
from curl_cffi import requests
# Định nghĩa tiêu đề tùy chỉnh
headers = {
'User-Agent': 'Mozilla/5.0 (compatible)',
'Accept-Language': 'en-US,en;q=0.5',
}
# Dữ liệu để gửi trong yêu cầu POST
data = {
'username': 'testuser',
'password': 'testpass',
}
# Thực hiện yêu cầu POST
response = requests.post('https://httpbin.org/post', headers=headers, data=data)
# In phản hồi JSON
print('Phản hồi JSON:', response.json())
Mã thưởng
Nhận Mã thưởng của bạn cho các giải pháp captcha hàng đầu tại CapSolver: scrape. Sau khi đổi mã, bạn sẽ nhận được thêm 5% tiền thưởng sau mỗi lần nạp tiền, không giới hạn số lần.
Kết luận
Với curl_cffi, bạn có thể thực hiện hiệu quả các tác vụ thu thập dữ liệu web trong khi vẫn có khả năng kiểm soát chi tiết các yêu cầu HTTP của mình. Việc tích hợp nó với CapSolver cho phép bạn bỏ qua các captcha như ReCaptcha V2, cho phép truy cập vào nội dung mà nếu không thì rất khó để thu thập.
Cảm thấy tự do để mở rộng các ví dụ này cho phù hợp với nhu cầu thu thập dữ liệu cụ thể của bạn. Luôn nhớ tôn trọng các điều khoản dịch vụ của các trang web bạn thu thập dữ liệu và tuân thủ các hướng dẫn pháp lý.
Chúc bạn thu thập dữ liệu vui vẻ!
Tuyên bố Tuân thủ: Thông tin được cung cấp trên blog này chỉ mang tính chất tham khảo. CapSolver cam kết tuân thủ tất cả các luật và quy định hiện hành. Việc sử dụng mạng lưới CapSolver cho các hoạt động bất hợp pháp, gian lận hoặc lạm dụng là hoàn toàn bị cấm và sẽ bị điều tra. Các giải pháp giải captcha của chúng tôi nâng cao trải nghiệm người dùng trong khi đảm bảo tuân thủ 100% trong việc giúp giải quyết các khó khăn về captcha trong quá trình thu thập dữ liệu công khai. Chúng tôi khuyến khích việc sử dụng dịch vụ của chúng tôi một cách có trách nhiệm. Để biết thêm thông tin, vui lòng truy cập Điều khoản Dịch vụ và Chính sách Quyền riêng tư.
Thêm

Tiện ích tốt nhất để giải CAPTCHA 2026 là gì?
Trong thế giới an ninh trực tuyến không ngừng phát triển, các thách thức CAPTCHA đã trở thành rào cản phổ biến đối với người dùng internet...

Ethan Collins
12-Dec-2025

Genlogin: Đổi mới Trải nghiệm Tự động hóa Web
Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn Genlogin là gì và các dịch vụ mà họ cung cấp.

Rajinder Singh
12-Dec-2025

Proxys.io: Proxy riêng lẻ cho bất kỳ nhiệm vụ nào
Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn Proxys.io là gì và các dịch vụ mà họ cung cấp.

Lucas Mitchell
12-Dec-2025

Tabproxy: Dịch vụ proxy nhà ở giá trị tốt cho khu vực nước ngoài
Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn Tabproxy là gì và các dịch vụ mà họ cung cấp.

Anh Tuan
12-Dec-2025

IP2World Proxy Nhà Ở: Giải pháp IP proxy toàn cầu hàng đầu
Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn IP2World là gì và các dịch vụ mà họ cung cấp.

Ethan Collins
12-Dec-2025

Các lỗi 402, 403, 404 và 429 là gì trong việc quét web? Hướng dẫn toàn diện
Nắm vững xử lý lỗi quét web bằng cách hiểu các lỗi 402, 403, 404 và 429. Học cách sửa lỗi 403 Cấm, triển khai giải pháp xử lý lỗi 429 và xử lý mã trạng thái 402 Yêu cầu thanh toán mới xuất hiện.

Lucas Mitchell
12-Dec-2025

