
Anh Tuan
Data Science Expert
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:
libcurl để thực hiện các yêu cầu HTTP nhanh chóng.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:
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:
sudo apt-get install libcurl4-openssl-dev
Cài đặt curl_cffi bằng pip:
pip install curl_cffi
Đâ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:
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)
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.
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)
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.
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.
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:
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)
Bạn có thể quản lý cookie bằng CookieJar từ mô-đun http.cookiejar của 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}')
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:
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())
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.
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ẻ!
Hãy học cách xác định nguyên nhân gây ra lỗi Cloudflare 1020 Truy cập Bị Từ Chối, cách Tường lửa Ứng dụng Web và phát hiện bot hoạt động, và cách các nhà phát triển giảm thiểu kết quả dương tính giả trong các quy trình tự động hợp lệ.

Học cách sử dụng mẫu CapSolver n8n để theo dõi các trang sản phẩm được bảo vệ bởi AWS WAF, giải quyết các thách thức, trích xuất giá cả, so sánh các thay đổi và kích hoạt cảnh báo tự động.
