Tìm Và Sử Dụng Hidden APIs: Scraping Hiệu Quả Hơn
Nhiều websites dùng hidden APIs để load data. Tìm và dùng APIs này giúp scrape nhanh và sạch hơn.
Tại Sao Dùng Hidden APIs?
- Nhanh hơn: Không cần parse HTML
- Structured data: JSON clean, dễ xử lý
- Ít bị block: Giống real app requests
- Pagination dễ: Offset/limit parameters
Cách Tìm Hidden APIs
1. Chrome DevTools Network Tab
1. Mở DevTools (F12)
2. Chọn Network tab
3. Filter: XHR hoặc Fetch
4. Interact với page (search, load more)
5. Xem các requests XHR → tìm JSON responses
6. Right-click → Copy as cURL
2. Dấu Hiệu API
- URL chứa: /api/, /v1/, /graphql
- Response: application/json
- Query params: page=, limit=, offset=
Ví Dụ: Shopee API
import requests
def shopee_search(keyword, limit=60):
url = 'https://shopee.vn/api/v4/search/search_items'
params = {
'by': 'relevancy',
'keyword': keyword,
'limit': limit,
'newest': 0,
'order': 'desc',
'page_type': 'search'
}
headers = {
'User-Agent': 'Mozilla/5.0...',
'Referer': 'https://shopee.vn',
'X-Requested-With': 'XMLHttpRequest'
}
response = requests.get(url, params=params, headers=headers)
data = response.json()
products = []
for item in data['items']:
products.append({
'name': item['item_basic']['name'],
'price': item['item_basic']['price'] / 100000,
'sold': item['item_basic']['sold'],
'shop_id': item['item_basic']['shopid'],
'item_id': item['item_basic']['itemid']
})
return products
Ví Dụ: Tiki API
def tiki_search(keyword, limit=40):
url = 'https://tiki.vn/api/personalish/v1/blocks/listings'
params = {
'limit': limit,
'q': keyword,
'sort': 'top_seller'
}
response = requests.get(url)
data = response.json()
return [{
'name': p['name'],
'price': p['price'],
'rating': p.get('rating_average'),
'reviews': p.get('review_count')
} for p in data['data']]
GraphQL APIs
import requests
def graphql_query(endpoint, query, variables=None):
response = requests.post(
endpoint,
json={
'query': query,
'variables': variables or {}
},
headers={'Content-Type': 'application/json'}
)
return response.json()
# Example query
query = '''
query GetProducts($first: Int!) {
products(first: $first) {
edges {
node {
id
name
price
}
}
}
}
'''
result = graphql_query('https://api.example.com/graphql',
query, {'first': 10})
Headers Quan Trọng
headers = {
'User-Agent': 'Mozilla/5.0...',
'Accept': 'application/json',
'Referer': 'https://website.com',
'X-Requested-With': 'XMLHttpRequest',
'Authorization': 'Bearer TOKEN' # nếu cần
}
Best Practices
- Copy exact headers từ DevTools
- Include cookies nếu cần auth
- Respect rate limits
- Monitor API changes
VinaProxy + API Scraping
- Bypass IP-based rate limits
- Consistent API access
- Giá chỉ $0.5/GB
