Thông tin doanh nghiệp

Cách dùng Python crawl gợi ý từ khóa từ Google và YouTube

Tự động hóa việc nghiên cứu từ khóa bằng cách crawl từ khóa bằng Python từ Google và YouTube, giúp bạn tạo bộ keyword sát hành vi tìm kiếm và tiết kiệm chi phí công cụ.
Thay vì tốn tiền cho các công cụ keyword research, nhiều SEOer và developer đã chọn cách crawl từ khóa bằng Python để lấy trực tiếp gợi ý từ Google và YouTube. Bài viết này sẽ hướng dẫn bạn cách thực hiện từ A–Z: từ chuẩn bị môi trường, viết script, đến xử lý dữ liệu đầu ra chuyên nghiệp.
crawl từ khóa bằng Python

Vì sao nên crawl từ khóa bằng Python

Trong thời đại nội dung và tìm kiếm thống trị như hiện nay, việc nắm bắt các gợi ý từ khóa là vũ khí tối thượng giúp SEOer, content marketer và cả developer phát triển chiến lược nội dung chính xác. Nhưng tại sao lại cần đến Python? Và nó mang lại điều gì vượt trội so với các công cụ có sẵn?

Chủ động kiểm soát dữ liệu từ Google và YouTube

Python giúp bạn truy xuất chính xác những gợi ý từ khóa từ Google Suggest và YouTube Autocomplete mà không bị giới hạn bởi giao diện công cụ. Bạn có thể chủ động quyết định: từ khóa gốc, số lượng gợi ý, ngôn ngữ, khu vực, cấu trúc dữ liệu đầu ra… Từ đó, bạn tạo được hệ thống nghiên cứu keyword sâu sát mục tiêu và đối tượng người dùng.

Tiết kiệm chi phí công cụ nghiên cứu từ khóa

Thay vì phải trả tiền cho các công cụ như Ahrefs, SEMrush hay KeywordTool.io, một đoạn script Python miễn phí có thể giúp bạn thu được dữ liệu tương tự. Đặc biệt với những ai chỉ cần crawl nhanh danh sách từ khóa cho niche nhỏ, đây là giải pháp tối ưu chi phí, dễ tinh chỉnh theo nhu cầu.

Dễ mở rộng, tự động hóa và tái sử dụng

Script Python có thể chạy hàng ngày, tích hợp vào hệ thống content pipeline hoặc kết hợp với Google Sheet, Notion API, Airtable... để cập nhật dữ liệu keyword mới theo thời gian thực. Đây là điều mà các công cụ thương mại thường khó đáp ứng nếu không trả phí cao cấp.

Cách dùng Python crawl gợi ý từ khóa từ Google và YouTube

Những gì cần chuẩn bị để crawl hiệu quả

Trước khi viết bất kỳ dòng code nào, bạn cần chuẩn bị một số công cụ và kiến thức nền cơ bản. Dưới đây là danh sách tối thiểu để bắt đầu crawl từ khóa bằng Python từ Google và YouTube một cách suôn sẻ.

Cài đặt Python và môi trường lập trình

Bạn cần cài đặt Python 3.7 từ python.org. Nên dùng kèm môi trường ảo (virtualenv) và cài thêm Jupyter Notebook hoặc VS Code để lập trình dễ dàng hơn. Những IDE này giúp debug và chạy thử script hiệu quả, nhất là khi crawl dữ liệu lớn.

Các thư viện Python cần dùng

  • requests: Gửi HTTP request lấy dữ liệu từ Google/YouTube.
  • json: Xử lý phản hồi dạng JSON từ server.
  • pandas: Lưu trữ kết quả dạng bảng, dễ xuất ra file CSV.
  • time: Tạo delay để tránh bị chặn IP.
  • urllib.parse: Encode từ khóa đúng chuẩn URL.

Cài nhanh bằng lệnh:

pip install requests pandas

Danh sách seed keywords cần crawl

Bạn cần chuẩn bị sẵn danh sách từ khóa gốc (seed keywords), có thể lưu ở dạng .txt, .csv hoặc .xlsx. Mỗi dòng là một từ khóa chủ đề bạn muốn mở rộng. Ví dụ:

giày thể thao

lập trình Python

máy ảnh du lịch

Kiến thức nền tảng về HTTP và JSON

Dù không cần quá giỏi kỹ thuật, bạn vẫn nên hiểu cách Google Suggest hay YouTube Autocomplete hoạt động: khi người dùng gõ một từ, trình duyệt gửi yêu cầu GET đến endpoint của Google/YouTube và nhận về danh sách JSON các gợi ý. Hiểu điều này giúp bạn xác định chính xác URL cần crawl và cách bóc tách dữ liệu.

Cách crawl từ khóa bằng Python từng bước

Theo nghiên cứu của Ahrefs, hơn 94% ý tưởng nội dung đến từ các gợi ý tìm kiếm. Và hơn 80% SEOer chuyên nghiệp đã từng tự crawl Google Suggest để tạo bộ từ khóa chuyên sâu. Bạn cũng có thể làm điều đó chỉ với 5 bước Python cực đơn giản dưới đây.

Bước 1 – Cài môi trường và thư viện cần thiết

Đầu tiên, bạn cần đảm bảo Python và thư viện đã được cài đặt. Tạo môi trường ảo (tuỳ chọn) và cài:

pip install requests pandas

→ Mục tiêu: Đảm bảo hệ thống có thể gửi request và lưu dữ liệu.

Mẹo: Dùng Jupyter Notebook để chạy từng đoạn code sẽ dễ debug hơn.

Bước 2 – Viết hàm crawl gợi ý từ Google Suggest

Google Suggest trả kết quả từ API không chính thức:

http://suggestqueries.google.com/complete/search?client=firefox&hl=vi&q={keyword}

Bạn viết một hàm như sau:

import requests

def crawl_google(keyword):

    url = f"http://suggestqueries.google.com/complete/search?client=firefox&hl=vi&q={keyword}"

    res = requests.get(url)

    if res.status_code == 200:

        return res.json()[1]

    return []

→ Dấu hiệu đúng: API trả về list gợi ý; độ dài > 0.

Bước 3 – Crawl từ nhiều seed keyword và lưu kết quả

Bạn có thể chạy hàng loạt seed keywords:

import pandas as pd

seed_keywords = ['giày thể thao', 'lập trình python', 'máy ảnh du lịch']

results = []

for kw in seed_keywords:

    suggestions = crawl_google(kw)

    for sug in suggestions:

        results.append({'seed': kw, 'suggestion': sug})

df = pd.DataFrame(results)

df.to_csv('google_suggest.csv', index=False)

→ Mục tiêu: Có file google_suggest.csv chứa toàn bộ kết quả crawl.

Bước 4 – Crawl từ khóa gợi ý YouTube Autocomplete

YouTube sử dụng endpoint:

http://suggestqueries.google.com/complete/search?client=firefox&ds=yt&hl=vi&q={keyword}

Thay đổi nhỏ ở tham số ds=yt:

def crawl_youtube(keyword):

    url = f"http://suggestqueries.google.com/complete/search?client=firefox&ds=yt&hl=vi&q={keyword}"

    res = requests.get(url)

    if res.status_code == 200:

        return res.json()[1]

    return []

→ Mẹo: Có thể gộp kết quả Google và YouTube vào một file Excel đa sheet.

Bước 5 – Tránh bị chặn, xử lý chậm mạng

Thêm delay giữa mỗi request để tránh bị block:

import time

for kw in seed_keywords:

    time.sleep(1.5)

    ...

→ Mẹo: Nếu crawl quá nhiều, nên dùng proxy hoặc random user-agent nâng cao.

Những lỗi thường gặp khi crawl từ khóa

Crawl từ khóa nghe có vẻ đơn giản, nhưng tại sao nhiều người lại không thu được dữ liệu? Dưới đây là những lỗi phổ biến bạn cần tránh nếu không muốn mất hàng giờ mà không ra kết quả nào.

Gửi sai định dạng URL hoặc thiếu tham số

Nhiều bạn quên thêm client=firefox hoặc ds=yt, dẫn đến API không trả về đúng định dạng. Đặc biệt với YouTube, phải có ds=yt mới nhận được gợi ý video.

Không xử lý lỗi HTTP và timeout

Khi mạng chập chờn hoặc server trả về mã lỗi (400/403), bạn cần bắt lỗi để không làm hỏng toàn bộ vòng lặp:

try:

    res = requests.get(url, timeout=5)

except requests.exceptions.RequestException:

    continue

Crawl quá nhanh dẫn đến bị block IP

Nếu bạn gửi quá nhiều request trong thời gian ngắn, Google hoặc YouTube có thể tạm chặn IP. Hãy luôn sleep() sau mỗi lần crawl hoặc sử dụng proxy nếu cần scale lớn.

Không encode từ khóa gây lỗi URL

Từ khóa tiếng Việt phải được encode đúng:

from urllib.parse import quote

url = f"...?q={quote(keyword)}"

Nếu không encode, ký tự đặc biệt như dấu cách, dấu nháy sẽ làm lỗi URL hoặc trả về gợi ý sai.

Dấu hiệu nhận biết crawl từ khóa đúng cách

Tháng trước, một bạn junior SEO trong team mình tự viết script Python để crawl từ khóa. Sau 2 giờ chạy, bạn ấy ra được 0 dòng dữ liệu. Lỗi không phải ở code, mà do không kiểm tra được những dấu hiệu cho thấy script hoạt động đúng. Dưới đây là cách bạn tránh sai lầm đó.

Kết quả trả về không rỗng

Dấu hiệu đơn giản nhưng quan trọng nhất là: danh sách kết quả từ API trả về không phải mảng trống. Nếu res.json()[1] == [], có thể do:

  • Seed keyword không có gợi ý thực tế.
  • Gửi sai endpoint (Google vs YouTube).
  • Không encode đúng từ khóa.

File CSV hoặc JSON có dữ liệu đúng định dạng

Sau khi crawl, hãy mở file google_suggest.csv hoặc youtube_suggest.csv. Kiểm tra:

  • Cột seed và suggestion đầy đủ.
  • Dữ liệu không lặp dòng.
  • Gợi ý có liên quan sát đến seed keyword.

Ví dụ kết quả đúng:

seed

suggestion

giày thể thao

giày thể thao nike

giày thể thao

giày thể thao nữ đẹp

Không bị chặn hoặc lỗi HTTP 403

Kiểm tra status_code == 200. Nếu thấy nhiều lỗi 403 Forbidden hoặc 429 Too Many Requests, nghĩa là bạn bị chặn do gửi quá nhiều request trong thời gian ngắn. Hãy dùng time.sleep() hoặc random proxy.

Tệp log hoặc terminal có tiến trình rõ ràng

Luôn in log tiến trình crawl để biết script đang chạy tới đâu:

print(f"Crawling: {keyword} - Found {len(suggestions)} results")

Điều này giúp bạn debug dễ nếu script dừng giữa chừng hoặc không phản hồi.

5 cách cải tiến script crawl từ khóa

Một đoạn script cơ bản giúp bạn crawl gợi ý từ Google/YouTube. Nhưng nếu bạn muốn scale lớn, tránh trùng lặp, lưu trữ có hệ thống, thì 5 cách cải tiến sau đây sẽ nâng cấp script của bạn lên tầm chuyên nghiệp.

Tối ưu crawl từ khóa theo bảng chữ cái

Thêm hậu tố từ A–Z để mở rộng gợi ý:

for kw in seed_keywords:

    for ch in 'abcdefghijklmnopqrstuvwxyz':

        full_kw = f"{kw} {ch}"

        suggestions = crawl_google(full_kw)

→ Hiệu quả: mở rộng hàng chục lần số gợi ý từ mỗi seed keyword.

Kết hợp Google và YouTube vào một pipeline

Bạn có thể tạo một dict:

{

  "giày thể thao": {

    "google": [...],

    "youtube": [...]

  }

}

→ Giúp so sánh keyword nào phổ biến hơn trên từng nền tảng.

Tránh trùng lặp kết quả với tập set()

Dùng set() để loại bỏ từ khóa trùng lặp trong kết quả crawl:

seen = set()

for suggestion in suggestions:

    if suggestion not in seen:

        seen.add(suggestion)

        ...

Random User-Agent và proxy để chống chặn

Tích hợp fake_useragent, requests.Session() và proxy list giúp tránh bị block khi scale lớn. Thư viện hỗ trợ: fake_useragent, httpx, requests-html.

Lưu kết quả vào Google Sheet hoặc Notion API

Thay vì chỉ lưu vào CSV, bạn có thể đẩy dữ liệu thẳng lên Google Sheet:

  • Dùng gspread Google Service Account.
  • Dùng notion-client để sync với bảng keyword trên Notion.

→ Rất hữu ích nếu làm việc theo nhóm hoặc báo cáo cho khách hàng.

Xuất dữ liệu gợi ý ra file CSV, Excel hoặc JSON

Dù crawl đúng từ khóa là điều cần thiết, nhưng nếu không lưu trữ và xử lý dữ liệu đầu ra đúng cách, toàn bộ quá trình crawl gần như trở nên vô dụng. Việc xuất dữ liệu ra file rõ ràng không chỉ giúp bạn phân tích sâu hơn mà còn dễ tích hợp vào hệ thống nội bộ hoặc báo cáo khách hàng.

Khi nào nên dùng CSV, Excel hoặc JSON

  • CSV: Nhẹ, dễ mở bằng Excel, phù hợp khi làm SEO hoặc chạy Google Ads.
  • Excel (.xlsx): Có nhiều sheet, công thức, màu sắc – phù hợp khi trình bày kết quả crawl theo nhóm hoặc bộ từ khóa.
  • JSON: Dễ tích hợp hệ thống backend, API hoặc lưu dạng có cấu trúc phân cấp (seed → suggestions).

Xuất file CSV với Pandas

df = pd.DataFrame(results)

df.to_csv('keyword_google.csv', index=False)

→ File này mở bằng Excel, Google Sheets hoặc upload vào Looker Studio để trực quan hóa.

Tạo file Excel với nhiều sheet

with pd.ExcelWriter('keywords_all.xlsx') as writer:

    df_google.to_excel(writer, sheet_name='Google', index=False)

    df_youtube.to_excel(writer, sheet_name='YouTube', index=False)

→ Giúp bạn theo dõi và trình bày keyword theo từng nền tảng riêng biệt.

Xuất dữ liệu sang JSON cho lập trình viên

import json

with open('keywords.json', 'w', encoding='utf-8') as f:

    json.dump(results, f, ensure_ascii=False, indent=2)

→ Định dạng JSON đặc biệt hữu ích nếu bạn dùng kết hợp với JavaScript, REST API hoặc Firebase.

Đảm bảo mã hóa UTF-8 khi lưu tiếng Việt

Một số IDE hoặc hệ điều hành sẽ gây lỗi font khi không lưu file đúng UTF-8:

open('filename.csv', 'w', encoding='utf-8-sig')

→ Thêm utf-8-sig đảm bảo mở bằng Excel không bị lỗi dấu tiếng Việt.

Crawl từ khóa bằng Python là phương pháp linh hoạt, hiệu quả cao và tiết kiệm chi phí cho cả SEOer lẫn developer. Khi đã hiểu rõ cách hoạt động và cấu trúc dữ liệu, bạn hoàn toàn có thể tự động hóa toàn bộ quy trình nghiên cứu từ khóa. Hãy bắt đầu từ những script cơ bản và nâng cấp dần để tối ưu hệ thống nội dung của bạn.

Hỏi đáp về crawl từ khóa bằng Python

Có cần dùng proxy khi crawl từ khóa bằng Python không?

Không bắt buộc nếu bạn crawl ít và có thêm sleep(). Tuy nhiên, với crawl quy mô lớn hoặc chạy hàng loạt, nên dùng proxy để tránh bị Google hoặc YouTube chặn IP.

Làm sao phân biệt API Google Suggest và YouTube Suggest?

Cả hai dùng cùng endpoint nhưng khác tham số. Với YouTube cần thêm ds=yt, còn Google để mặc định client=firefox là đủ.

Có thể lấy thêm dữ liệu như lượt tìm kiếm không?

Không. Google Suggest chỉ cung cấp gợi ý từ khóa, không có search volume. Muốn có volume, cần kết hợp thêm API của Ahrefs, SEMrush hoặc Google Ads Keyword Planner.

Script Python này có thể dùng để crawl Bing, Amazon không?

Không trực tiếp, nhưng có thể điều chỉnh endpoint và cách bóc JSON phù hợp với các nền tảng khác. Tuy nhiên, nhiều trang như Amazon sẽ cần dùng Selenium.

Có giới hạn số lượng keyword có thể crawl không?

Không giới hạn cụ thể, nhưng nếu bạn gửi quá nhiều request liên tục, rất dễ bị block tạm thời. Tốt nhất nên chia nhỏ danh sách seed, thêm delay và kiểm tra log thường xuyên.

Có thể tích hợp script vào Google Sheet tự động được không?

Có. Bạn có thể dùng thư viện gspread hoặc Google Apps Script để đẩy dữ liệu trực tiếp lên Google Sheet sau mỗi lần crawl xong.

08/12/2025 14:03:16
GỬI Ý KIẾN BÌNH LUẬN