iT邦幫忙

1

Selenium爬蟲問題

  • 分享至 

  • xImage

在做Agoda爬蟲但不知到為什麼描述爬不出來

有程式碼或是錯誤訊息嗎?
melisa iT邦新手 5 級 ‧ 2024-12-02 15:03:36 檢舉
或許可以嘗試一下Octoparse的Agoda模版?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
itren789
iT邦新手 5 級 ‧ 2024-12-03 10:52:05

當使用 Selenium 進行 Agoda 網站爬蟲時,若無法正確抓取數據,可能有幾個原因。你可以根據以下幾個常見問題進行檢查和排除:

  1. 頁面動態加載
    Agoda 是一個動態網站,頁面內容通常是透過 JavaScript 异步加載的。如果直接使用 Selenium 抓取頁面源代碼,可能無法抓取到完整的內容。解決這個問題的方法是:

等待元素加載完成:確保頁面上的元素已經完全加載完成再進行抓取。可以使用 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);")
  1. 反爬蟲機制
    Agoda 等網站可能會實施反爬蟲機制,阻止自動化腳本的訪問。例如,網站可能會檢測到你的請求來自 Selenium 等自動化工具,並封鎖你的請求。你可以嘗試以下方法來繞過反爬蟲機制:

更改 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 模擬這些操作,減少被檢測到自動化的風險。

  1. XPath 或 CSS 選擇器問題
    確保你使用的 XPath 或 CSS 選擇器是正確的。Agoda 的頁面結構可能包含動態加載的元素,這可能導致靜態選擇器無法生效。

檢查 XPath 是否正確:你可以在瀏覽器的開發者工具中檢查頁面的元素,確保你的 XPath 是準確的。例如,右鍵點擊頁面元素,選擇“檢查”,然後右鍵該元素,選擇“Copy” -> “Copy XPath”。

示例 XPath:

python
element = driver.find_element(By.XPATH, "//div[@class='result-item']")
  1. 請求頭問題
    有些網站會檢查請求頭,確保請求是來自正常的瀏覽器。你可以確保 Selenium 模擬的瀏覽器請求頭是完整的:

使用完整的請求頭:你可以從瀏覽器的開發者工具中獲取完整的請求頭(例如 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")
  1. 頁面結構變動
    Agoda 的頁面結構可能會不定期更新,這會影響你爬取資料的方式。你可以使用開發者工具檢查頁面元素,確保你的代碼適應了最新的頁面結構。

其他建議:
瀏覽器驅動問題:確保你的 Selenium 版本與瀏覽器驅動(例如 ChromeDriver、GeckoDriver 等)匹配。
調試:可以在爬蟲中加入 driver.get_screenshot_as_file("screenshot.png"),這樣可以在爬取過程中捕捉頁面截圖,幫助你查看頁面是否正確渲染。
如果這些方法還無法解決問題,可以提供更多的代碼或錯誤訊息。

推荐阅读:
https://momoproxy.com/zh-CN/blog/selenium-proxy-detected

我要發表回答

立即登入回答