API Scraping: Cách Tìm Và Sử Dụng Hidden APIs
Nhiều websites có hidden APIs trả về JSON thay vì HTML. Scrape API nhanh và dễ hơn nhiều so với parse HTML.
Tại Sao API Tốt Hơn HTML?
- Nhanh hơn: Payload nhỏ, không cần parse
- Sạch hơn: JSON structured data
- Ổn định hơn: API ít thay đổi hơn UI
- Ít bị detect: Như mobile app request
Cách Tìm Hidden APIs
1. Browser DevTools
- Mở website, F12 → Network tab
- Filter: XHR/Fetch
- Thực hiện action (search, load more)
- Tìm requests trả về JSON
2. Dấu Hiệu Nhận Biết
- URL chứa
/api/,/v1/,/graphql - Response type:
application/json - Request có Bearer token hoặc API key
Ví Dụ: Tìm API Shopee
# DevTools → Network → XHR
# Tìm được: https://shopee.vn/api/v4/search/search_items
import requests
url = "https://shopee.vn/api/v4/search/search_items"
params = {
"keyword": "iphone",
"limit": 50,
"newest": 0
}
headers = {
"User-Agent": "Mozilla/5.0...",
"Referer": "https://shopee.vn"
}
response = requests.get(url, params=params, headers=headers)
data = response.json()
for item in data['items']:
print(item['name'], item['price'])
GraphQL APIs
import requests
url = "https://api.example.com/graphql"
query = """
{
products(first: 10) {
edges {
node {
name
price
}
}
}
}
"""
response = requests.post(url, json={"query": query})
data = response.json()
Xử Lý Authentication
# Bearer Token
headers = {
"Authorization": "Bearer YOUR_TOKEN"
}
# API Key
params = {
"api_key": "YOUR_KEY"
}
# Cookie-based
session = requests.Session()
session.get("https://example.com/login") # Get cookies
response = session.get("https://example.com/api/data")
Tips
- Check mobile app traffic (Burp Suite, mitmproxy)
- APIs thường có rate limits
- Respect authentication requirements
- Cache responses để giảm requests
VinaProxy + API Scraping
- Bypass geo-restricted APIs
- Rotate IPs để tránh rate limits
- Giá chỉ $0.5/GB
