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ư requests
và BeautifulSoup
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ước 2: Nhập các Thư viện
- Bước 3: Xây dựng URL Tìm kiếm
- Bước 4: Khởi động Trình duyệt Headless
- Bước 5: Trích xuất Kết quả Tự nhiên
- Bước 6: Lưu Kết quả
- Mã hoàn chỉnh
- Ghi chú Cuối
Bước 1: Cài đặt SeleniumBase
Để bắt đầu, bạn cần cài đặt SeleniumBase:
bash
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
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
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
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
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
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
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.