Củ web liên quan đến việc trích xuất dữ liệu từ các trang web cho các tác vụ như phân tích dữ liệu, nghiên cứu và tự động hóa. Mặc dù Python cung cấp các thư viện để gửi các yêu cầu HTTPS và thực hiện cạo, sử dụng Curl thông qua PyCurl có thể hiệu quả hơn. Trong hướng dẫn này, chúng tôi sẽ trình bày cách sử dụng Python Curl để cạo các trang web. Chúng tôi sẽ cung cấp các ví dụ và so sánh hiệu suất của nó với các thư viện phổ biến khác như Yêu cầu, HTTPX và AIOHTTP.
Trước khi lặn vào tích hợp Python, điều cần thiết là phải hiểu những điều cơ bản của Curl. Bạn có thể sử dụng các lệnh Curl trực tiếp trong thiết bị đầu cuối để thực hiện các tác vụ như thực hiện các yêu cầu GET và đăng.
Ví dụ Các lệnh Curl:
# GET lời yêu cầu
curl -X GET "https://httpbin.org/get"
# POST lời yêu cầu
curl -X POST "https://httpbin.org/post"
Để sử dụng Curl trong Python, chúng tôi cần thư viện PyCurl, cung cấp giao diện Python cho thư viện Curl.
Cài đặt pycurl:
pip install pycurl
Pycurl cung cấp kiểm soát chi tiết các yêu cầu HTTP trong Python. Dưới đây là một ví dụ chứng minh cách thực hiện yêu cầu nhận với pycurl:
import pycurl
import certifi
from io import BytesIO
# Tạo đối tượng byte để giữ dữ liệu phản hồi
buffer = BytesIO()
# Khởi tạo một đối tượng Curl
c = pycurl.Curl()
# Đặt URL cho HTTP GET yêu cầu
c.setopt(c.URL, 'https://httpbin.org/get')
# Đặt bộ đệm để ghi dữ liệu đầu ra
c.setopt(c.WRITEDATA, buffer)
# Đặt đường dẫn đến tệp gói CA để xác minh SSL/TLS
c.setopt(c.CAINFO, certifi.where())
# Thực hiện yêu cầu HTTP
c.perform()
# Đóng đối tượng Curl để giải phóng tài nguyên
c.close()
# Lấy nội dung của phản hồi từ bộ đệm
body = buffer.getvalue()
# Giải mã và in cơ thể phản hồi
print(body.decode('iso-8859-1'))
Gửi dữ liệu với yêu cầu POST là phổ biến. Với pycurl, sử dụng tùy chọn Postfields. Dưới đây là một ví dụ về việc đưa ra yêu cầu bài viết với pycurl:
import pycurl
import certifi
from io import BytesIO
# Tạo đối tượng byte để giữ dữ liệu phản hồi
buffer = BytesIO()
# Khởi tạo một đối tượng Curl
c = pycurl.Curl()
# Đặt URL cho yêu cầu bài HTTP
c.setopt(c.URL, 'https://httpbin.org/post')
# Đặt dữ liệu sẽ được đăng
post_data = 'param1="pycurl"¶m2=article'
c.setopt(c.POSTFIELDS, post_data)
# Đặt bộ đệm để ghi dữ liệu đầu ra
c.setopt(c.WRITEDATA, buffer)
# Đặt đường dẫn đến tệp gói CA để xác minh SSL/TLS
c.setopt(c.CAINFO, certifi.where())
# Thực hiện yêu cầu HTTP
c.perform()
# Đóng đối tượng Curl để giải phóng tài nguyên
c.close()
# Lấy nội dung của phản hồi từ bộ đệm
body = buffer.getvalue()
# Giải mã và in cơ thể phản hồi
print(body.decode('iso-8859-1'))
Tiêu đề tùy chỉnh hoặc xác thực thường được yêu cầu với các yêu cầu HTTP. Dưới đây là một ví dụ về việc thiết lập các tiêu đề tùy chỉnh với pycurl:
import pycurl
import certifi
from io import BytesIO
# Tạo đối tượng byte để giữ dữ liệu phản hồi
buffer = BytesIO()
# Khởi tạo một đối tượng Curl
c = pycurl.Curl()
# Đặt URL cho HTTP GET yêu cầu
c.setopt(c.URL, 'https://httpbin.org/get')
# Đặt tiêu đề HTTP tùy chỉnh
c.setopt(c.HTTPHEADER, ['User-Agent: MyApp', 'Accept: application/json'])
# Đặt bộ đệm để ghi dữ liệu đầu ra
c.setopt(c.WRITEDATA, buffer)
# Đặt đường dẫn đến tệp gói CA để xác minh SSL/TLS
c.setopt(c.CAINFO, certifi.where())
# Thực hiện yêu cầu HTTP
c.perform()
# Đóng đối tượng Curl để giải phóng tài nguyên
c.close()
# Lấy nội dung của phản hồi từ bộ đệm
body = buffer.getvalue()
# Giải mã và in cơ thể phản hồi
print(body.decode('iso-8859-1'))
Phân tích và xử lý các phản hồi XML là rất quan trọng khi làm việc với API. Dưới đây là một ví dụ về việc xử lý các phản hồi XML với pycurl:
# Nhập thư viện cần thiết
import pycurl # Thư viện để thực hiện các yêu cầu HTTP
import certifi # Thư viện xác minh chứng chỉ SSL
from io import BytesIO # Thư viện để xử lý các luồng byte
import xml.etree.ElementTree as ET # Thư viện phân tích cú pháp XML
# Tạo bộ đệm để giữ dữ liệu phản hồi
buffer = BytesIO()
# Khởi tạo một đối tượng Curl
c = pycurl.Curl()
# Đặt URL cho HTTP GET yêu cầu
c.setopt(c.URL, 'https://www.google.com/sitemap.xml')
# Đặt bộ đệm để ghi dữ liệu đầu ra
c.setopt(c.WRITEDATA, buffer)
# Đặt đường dẫn đến tệp gói CA để xác minh SSL/TLS
c.setopt(c.CAINFO, certifi.where())
# Thực hiện yêu cầu HTTP
c.perform()
# Đóng đối tượng Curl để giải phóng tài nguyên
c.close()
# Lấy nội dung của phản hồi từ bộ đệm
body = buffer.getvalue()
# Phân tích nội dung XML vào đối tượng ElementTree
root = ET.fromstring(body.decode('utf-8'))
# In thẻ và các thuộc tính của phần tử gốc của cây XML
print(root.tag, root.attrib)
Xử lý lỗi mạnh mẽ là điều cần thiết để thực hiện các yêu cầu HTTP đáng tin cậy. Dưới đây là một ví dụ về xử lý lỗi với pycurl:
import pycurl # Nhập thư viện pycurl
import certifi # Nhập thư viện Certifi
from io import BytesIO # Nhập bytesio để xử lý các luồng byte
# Khởi tạo một đối tượng Curl
c = pycurl.Curl()
buffer = BytesIO()
# Đặt URL cho yêu cầu HTTP
c.setopt(c.URL, 'http://example.com')
c.setopt(c.WRITEDATA, buffer)
c.setopt(c.CAINFO, certifi.where())
try:
# Thực hiện yêu cầu HTTP
c.perform()
except pycurl.error as e:
# Nếu xảy ra lỗi trong quá trình yêu cầu, hãy xem ngoại lệ pycurl.error
errno, errstr = e.args # Lấy số lỗi và thông báo lỗi
print(f'Error: {errstr} (errno {errno})') #In thông báo lỗi và số lỗi
finally:
# Đóng đối tượng Curl để giải phóng tài nguyên
c.close()
body = buffer.getvalue()
print(body.decode('iso-8859-1')) # Giải mã và in cơ thể phản hồi
Mã đã sửa điều chỉnh URL thành https://example.com, giải quyết vấn đề giao thức. Nó lặp lại quá trình định cấu hình yêu cầu, thực hiện và xử lý các lỗi như trong đoạn trích ban đầu. Sau khi thực hiện thành công, cơ thể phản hồi lại được giải mã và in. Các đoạn trích này nêu bật tầm quan trọng của cấu hình URL thích hợp và xử lý lỗi mạnh mẽ trong các yêu cầu HTTP với pycurl.
import pycurl # Nhập thư viện pycurl
import certifi # Nhập thư viện Certifi
from io import BytesIO # Nhập bytesio để xử lý các luồng byte
# Tái tạo đối tượng Curl
c = pycurl.Curl()
buffer = BytesIO()
# Sửa URL để sử dụng HTTPS
c.setopt(c.URL, 'https://example.com')
c.setopt(c.WRITEDATA, buffer)
c.setopt(c.CAINFO, certifi.where())
try:
# Thực hiện yêu cầu HTTP đã sửa
c.perform()
except pycurl.error as e:
# Nếu xảy ra lỗi trong quá trình yêu cầu, hãy xem ngoại lệ pycurl.error
errno, errstr = e.args # Lấy số lỗi và thông báo lỗi
print(f'Error: {errstr} (errno {errno})') # In thông báo lỗi và số lỗi
finally:
# Đóng đối tượng Curl để giải phóng tài nguyên
c.close()
body = buffer.getvalue()
print(body.decode('iso-8859-1')) # Giải mã và in cơ thể phản hồi
Curl cung cấp nhiều tùy chọn nâng cao để kiểm soát hành vi yêu cầu HTTP, chẳng hạn như xử lý cookie và thời gian chờ. Dưới đây là một ví dụ chứng minh các tùy chọn nâng cao với pycurl.
import pycurl # Nhập thư viện pycurl
import certifi # Nhập thư viện Certifi để xác minh chứng chỉ SSL
from io import BytesIO # Nhập bytesio để xử lý các luồng byte
# Tạo bộ đệm để giữ dữ liệu phản hồi
buffer = BytesIO()
# Khởi tạo một đối tượng Curl
c = pycurl.Curl()
# Đặt URL cho yêu cầu HTTP
c.setopt(c.URL, 'http://httpbin.org/cookies')
# Bật cookie bằng cách đặt một cặp giá trị khóa cụ thể
c.setopt(c.COOKIE, 'cookies_key=cookie_value')
# Đặt thời gian chờ 30 giây cho yêu cầu
c.setopt(c.TIMEOUT, 30)
#Đặt bộ đệm để ghi dữ liệu đầu ra
c.setopt(c.WRITEDATA, buffer)
# Đặt đường dẫn đến tệp gói CA để xác minh SSL/TLS
c.setopt(c.CAINFO, certifi.where())
# Thực hiện yêu cầu HTTP
c.perform()
# Đóng đối tượng Curl để giải phóng tài nguyên
c.close()
# Lấy nội dung của phản hồi từ bộ đệm
body = buffer.getvalue()
# Decode the response body using UTF-8 encoding and print it
print(body.decode('utf-8'))
Khi làm việc với các yêu cầu HTTP trong Python, bốn thư viện phổ biến là pycurl, yêu cầu, httpx và aiohttp. Mỗi người có điểm mạnh và điểm yếu của nó. Đây là một so sánh để giúp bạn chọn công cụ phù hợp cho nhu cầu của mình:
Tính năng | PycURL | Requests | HTTPX | AIOHTTP |
---|---|---|---|---|
Dễ sử dụng | Vừa phải | Rất dễ dàng | Dễ | Vừa phải |
Hiệu suất | Cao | Vừa phải | Cao | Cao |
Hỗ trợ không đồng bộ | KHÔNG | KHÔNG | Đúng | Đúng |
Phát trực tuyến | Đúng | Giới hạn | Đúng | Đúng |
Hỗ trợ giao thức | Mở rộng (hỗ trợ nhiều giao thức) | HTTP/HTTPS | HTTP/HTTPS, HTTP/2, WebSockets | HTTP/HTTPS, WebSockets |
Phân tích so sánh chỉ ra rằng PyCurl cung cấp hiệu suất và tính linh hoạt cao, làm cho nó phù hợp cho người dùng nâng cao, những người yêu cầu quản lý chi tiết các yêu cầu HTTP. Mặt khác, các yêu cầu và httpx phù hợp hơn cho các kịch bản đơn giản hơn, trực quan hơn. AIOHTTP nổi bật trong việc xử lý các nhiệm vụ không đồng bộ, cung cấp các công cụ hiệu quả để quản lý các yêu cầu không đồng bộ.
Việc lựa chọn thư viện phù hợp phụ thuộc vào các nhu cầu và yêu cầu cụ thể của dự án của bạn, với PYCURL là một lựa chọn tuyệt vời cho những người cần tốc độ và khả năng nâng cao.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bình luận: 0