0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Hướng dẫn Scraping Kết quả Tìm kiếm Google bằng Python

Đăng vào 1 ngày trước

• 3 phút đọc

Hướng dẫn Scraping Kết quả Tìm kiếm Google bằng Python

Google Search là một hệ thống động và được bảo vệ. Các công cụ scraping tĩnh như requestsBeautifulSoup thường không hoạt động hiệu quả, vì chúng sẽ trả về HTML trống. Thay vào đó, bạn nên sử dụng một trình duyệt headless. Bài viết này sẽ hướng dẫn bạn cách sử dụng SeleniumBase trong chế độ Chrome không bị phát hiện.

Mục lục

Bước 1: Cài đặt SeleniumBase

Để bắt đầu, bạn cần cài đặt SeleniumBase:

bash Copy
pip install seleniumbase

Công cụ này cung cấp một wrapper mở rộng cho Selenium với chế độ uc (undetected Chrome) tích hợp sẵn.

Bước 2: Nhập các Thư viện

Bạn cần nhập vào dự án các thư viện cần thiết:

python Copy
from seleniumbase import Driver
from selenium.webdriver.common.by import By
import urllib.parse, pandas as pd

Bước 3: Xây dựng URL Tìm kiếm

Chúng ta sẽ tạo URL tìm kiếm Google từ một từ khóa:

python Copy
def build_search_url(query):
    return f"https://www.google.com/search?q={urllib.parse.quote_plus(query)}"

Bước 4: Khởi động Trình duyệt Headless

Khởi động Chrome trong chế độ uc để Google nhận diện như một người dùng thực:

python Copy
driver = Driver(uc=True, headless=True)

Bước 5: Trích xuất Kết quả Tự nhiên

Mỗi kết quả nằm trong div.MjjYud. Từ đó, ta sẽ lấy tiêu đề, liên kết và đoạn mô tả:

python Copy
def scrape_google(driver, query):
    driver.get(build_search_url(query))
    blocks = driver.find_elements(By.CSS_SELECTOR, "div.MjjYud")

    results = []
    for b in blocks:
        try:
            title = b.find_element(By.CSS_SELECTOR, "h3").text
            link = b.find_element(By.CSS_SELECTOR, "a").get_attribute("href")
            snippet = b.find_element(By.CSS_SELECTOR, "div.VwiC3b").text
            results.append({"Tiêu đề": title, "Liên kết": link, "Mô tả": snippet})
        except:
            continue
    return results

Bước 6: Lưu Kết quả

Lưu mọi thứ vào file CSV bằng pandas:

python Copy
data = scrape_google(driver, "what is web scraping")
pd.DataFrame(data).to_csv("organic_results.csv", index=False)
print(f"Đã lưu {len(data)} kết quả")

Mã hoàn chỉnh

Kiểm tra selector và sao chép:

python Copy
from seleniumbase import Driver
from selenium.webdriver.common.by import By
import urllib.parse, pandas as pd, time

def build_search_url(query):
    return f"https://www.google.com/search?q={urllib.parse.quote_plus(query)}"

def scrape_google(driver, query, max_pages=1):
    results = []
    for page in range(max_pages):
        url = build_search_url(query) + (f"&start={page*10}" if page > 0 else "")
        driver.get(url)
        time.sleep(5)  # wait for page to load

        try:
            blocks = driver.find_elements(By.CSS_SELECTOR, "div.MjjYud")
        except:
            continue

        for b in blocks:
            try:
                title = b.find_element(By.CSS_SELECTOR, "h3").text
                link = b.find_element(By.CSS_SELECTOR, "a").get_attribute("href")
                snippet = b.find_element(By.CSS_SELECTOR, "div.VwiC3b").text
                results.append({"Tiêu đề": title, "Liên kết": link, "Mô tả": snippet})
            except:
                continue
    return results

driver = Driver(uc=True, headless=True)  # undetected Chrome

try:
    data = scrape_google(driver, "what is web scraping", max_pages=2)

    pd.DataFrame(data).to_csv("organic_results.csv", index=False)
    print(f"Đã lưu {len(data)} kết quả")
finally:
    driver.quit()

Ghi chú Cuối

Bài viết này cung cấp hướng dẫn chi tiết về cách scraping kết quả tìm kiếm Google bằng Python. Nếu bạn có bất kỳ câu hỏi nào hoặc cần thêm ví dụ, hãy để lại bình luận ở dưới và tôi sẽ thêm vào.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào