Giới thiệu
Bạn có mệt mỏi khi phải vật lộn với proxy, bị chặn, hoặc viết những trình phân tích phức tạp chỉ để lấy dữ liệu bạn cần không? Hãy để chúng tôi giúp bạn đơn giản hóa điều đó. Việc lấy dữ liệu web không nên là một cuộc chiến.
Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách thực hiện yêu cầu đầu tiên với Zyte API và đi qua ba tính năng mạnh mẽ giúp xử lý những phần khó khăn trong việc thu thập dữ liệu web cho bạn.
Mục tiêu
- Cài đặt môi trường Python
- Thực hiện yêu cầu lấy HTML thô
- Render JavaScript với một tham số đơn giản
- Tự động trích xuất dữ liệu mà không cần viết parser
Thiết lập: Những Dòng Code Đầu Tiên
Đầu tiên, hãy chuẩn bị môi trường Python của bạn. Tôi giả định bạn đã cài đặt Python và thư viện requests (pip install requests).
Dưới đây là đoạn mã cơ bản để bắt đầu. Tôi sẽ nhập requests để gửi yêu cầu API và os để lấy an toàn khóa API từ biến môi trường. Mẹo nhỏ: Không bao giờ nên mã hóa khóa API của bạn trực tiếp trong mã! Lưu trữ chúng dưới dạng biến môi trường là một thực hành an toàn hơn nhiều.
Bạn sẽ cần mã API Zyte của mình, tốt nhất là được lưu trữ trong biến môi trường. Tuy nhiên, để thử nghiệm, bạn có thể dán trực tiếp vào mã (nhưng điều này không được khuyến nghị, và hãy cẩn thận không chia sẻ nó với bất kỳ ai).
python
import requests
import os
import base64
from rich import print
# Lấy khóa API từ biến môi trường
API_KEY = os.getenv('ZYTE_API_KEY')
if not API_KEY:
raise ValueError("Biến môi trường ZYTE_API_KEY chưa được thiết lập")
# Điểm cuối API Zyte cho việc trích xuất
ZYTE_API_URL = 'https://api.zyte.com/v1/extract'
Với điều đó đã xong, hãy đi vào phần thú vị.
Tính Năng 1: Lấy HTML Thô (Không Cần Quản Lý Proxy)
Lấy dữ liệu từ web bắt đầu với việc lấy HTML của một trang. Nhưng còn việc xoay vòng proxy, user agents và quản lý cấm thì sao? Quên điều đó đi. API sẽ xử lý tất cả cho bạn.
Để lấy HTML thô, bạn chỉ cần thực hiện một yêu cầu POST, cho API biết bạn muốn httpResponseBody, và xong.
python
# URL của trang web mà chúng ta muốn thu thập dữ liệu
target_url = 'https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html'
# Thực hiện yêu cầu để lấy HTML thô
response = requests.post(
ZYTE_API_URL,
auth=(API_KEY, ''),
json={
'url': target_url,
'httpResponseBody': True
}
)
# Phần thân phản hồi được mã hóa Base64
encoded_html = response.json()['httpResponseBody']
# Giải mã để có được HTML có thể sử dụng
html_bytes = base64.b64decode(encoded_html)
html = html_bytes.decode('utf-8')
# In 400 ký tự đầu tiên của HTML
print(html[:400])
Chỉ như vậy, bạn đã có HTML đầy đủ, sẵn sàng để được chuyển vào parser yêu thích của bạn như Beautiful Soup hoặc lxml. Điều quan trọng cần lưu ý? Một yêu cầu, không cần quản lý proxy.
Tính Năng 2: Render JavaScript với Một Tham Số Đơn Giản
Nếu một trang web phụ thuộc nhiều vào JavaScript để tải nội dung của nó thì sao? Trong quá khứ, điều này có nghĩa là phải sử dụng một công cụ tự động hóa nặng như Selenium hoặc Playwright. Đó là một thế giới của những bộ chọn dễ hỏng, cơn đau đầu về cấu hình máy chủ, và những cơn ác mộng về bảo trì.
Với Zyte API, bạn chỉ cần thay đổi một tham số. Thay httpResponseBody thành browserHtml, và API sẽ render trang trong một trình duyệt không đầu cho bạn.
python
# Thực hiện yêu cầu để lấy HTML được render từ trình duyệt
response = requests.post(
ZYTE_API_URL,
auth=(API_KEY, ''),
json={
'url': target_url,
'browserHtml': True
}
)
# HTML được trả về dưới dạng một chuỗi đơn giản, không cần giải mã
browser_html = response.json()['browserHtml']
# In 400 ký tự đầu tiên
print(browser_html[:400])
Không cần thêm phụ thuộc nào, không cần cài đặt các tệp nhị phân của trình duyệt, và không có sự không ổn định. Bạn có HTML được render hoàn hảo từ các trang động với một cuộc gọi API đơn giản. Thật dễ dàng.
Tính Năng 3: Bỏ Qua Các Parser với Trích Xuất Tự Động
Đây là nơi mọi thứ trở nên thực sự mạnh mẽ. Tại sao phải viết parser nếu bạn không cần phải làm vậy? Nếu bạn đang thu thập dữ liệu từ các loại trang phổ biến như sản phẩm, bài viết, hoặc thông tin tuyển dụng, bạn có thể yêu cầu API tự động trích xuất dữ liệu cho bạn.
Sử dụng một mô hình học máy ngầm, API có thể xác định thông tin chính, cấu trúc nó thành một đối tượng JSON sạch sẽ và trả lại cho bạn. Trong ví dụ này, tôi biết URL mà tôi nhắm đến là một trang sản phẩm.
python
# Để API trích xuất dữ liệu sản phẩm cho chúng ta
response = requests.post(
ZYTE_API_URL,
auth=(API_KEY, ''),
json={
'url': target_url,
'product': True
}
)
# Lấy dữ liệu đã được cấu trúc từ khóa 'product' trong phản hồi
product_data = response.json()['product']
# Hãy xem dữ liệu đã được cấu trúc của chúng ta!
print(product_data)
Thật tuyệt vời! Với product: True, chúng ta ngay lập tức nhận được dữ liệu được cấu trúc—tên, giá, tiền tệ, SKU, tình trạng có sẵn, và nhiều hơn nữa—mà không cần viết một dòng mã nào để phân tích. Điều này thật tuyệt cho việc xây dựng các pipeline dữ liệu có thể mở rộng khi một schema nhất quán là rất quan trọng.
Đến Lượt Bạn Thực Hiện
Chúng ta chỉ mới chạm đến bề mặt. Với một điểm cuối API duy nhất, bạn có thể loại bỏ proxies, render JavaScript mà không gặp rắc rối, và thậm chí không cần phân tích thủ công. Tập trung chuyển từ cách lấy dữ liệu sang những gì bạn sẽ làm với nó.
Sẵn sàng để thử nghiệm?
- Lấy khóa API của bạn từ bảng điều khiển Zyte.
- Xem tài liệu để khám phá thêm các tính năng như
productOptions. - Thử nghiệm trong playground để kiểm tra các cuộc gọi trên các trang web mà bạn nhắm đến.
Bắt đầu xây dựng yêu cầu đầu tiên của bạn và lấy dữ liệu web bạn cần, mà không gặp rắc rối. Cảm ơn bạn đã đọc, và hãy đăng ký để nhận thêm nội dung về thu thập dữ liệu web một cách thông minh!