當使用 Selenium 進行 Agoda 網站爬蟲時,若無法正確抓取數據,可能有幾個原因。你可以根據以下幾個常見問題進行檢查和排除:
等待元素加載完成:確保頁面上的元素已經完全加載完成再進行抓取。可以使用 WebDriverWait 來等待某些元素的可見性,例如:
python
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.XPATH, "//*[@id='element_id']")))
滾動頁面:有些內容是隨著滾動頁面才會加載的,你可以模擬滾動操作來觸發加載更多內容:
python
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
更改 User-Agent:可以更改 Selenium 瀏覽器的 User-Agent,模擬真實的用戶行為:
python
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")
driver = webdriver.Chrome(options=options)
使用代理:如果網站檢測到你的 IP 地址發送了過多的請求,可能會封鎖你的 IP。這時可以使用代理來避免被封禁:
python
options.add_argument('--proxy-server=http://your_proxy_address')
模擬滑鼠操作:有些反爬蟲機制會檢查是否有滑鼠移動或點擊的行為。你可以使用 Selenium 模擬這些操作,減少被檢測到自動化的風險。
檢查 XPath 是否正確:你可以在瀏覽器的開發者工具中檢查頁面的元素,確保你的 XPath 是準確的。例如,右鍵點擊頁面元素,選擇“檢查”,然後右鍵該元素,選擇“Copy” -> “Copy XPath”。
示例 XPath:
python
element = driver.find_element(By.XPATH, "//div[@class='result-item']")
使用完整的請求頭:你可以從瀏覽器的開發者工具中獲取完整的請求頭(例如 Referer、Accept、Accept-Language 等),並將其加入到 Selenium 的請求中。
python
options.add_argument("Accept-Language: en-US,en;q=0.9")
options.add_argument("Accept-Encoding: gzip, deflate, br")
其他建議:
瀏覽器驅動問題:確保你的 Selenium 版本與瀏覽器驅動(例如 ChromeDriver、GeckoDriver 等)匹配。
調試:可以在爬蟲中加入 driver.get_screenshot_as_file("screenshot.png"),這樣可以在爬取過程中捕捉頁面截圖,幫助你查看頁面是否正確渲染。
如果這些方法還無法解決問題,可以提供更多的代碼或錯誤訊息。
推荐阅读:
https://momoproxy.com/zh-CN/blog/selenium-proxy-detected