Tìm Và Sử Dụng Hidden APIs: Scraping Hiệu Quả Hơn

Trở lại Tin tức
Tin tức

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

Dùng Thử Ngay →