Mike的Python學院

Selenium、Python、網頁資料擷取與分析 Python、網頁爬蟲

Mike Ku

Learn Code With Mike品牌創辦人

2021/10/17

3個建構Python動態網頁爬蟲重要的等待機制

Q:什麼是Python網頁爬蟲的等待機制?
使用Python Selenium套件來開發動態網頁爬蟲時,有一個非常重要的觀念,就是「等待(Waits)」,這是什麼意思呢?簡單來說,就是Python爬蟲程式「等待(Waits)」網頁載入所要使用的元素,進而執行其它的操作。如果沒有處理好,就會時常發例外錯誤或影響執行效率。所以,適當的使用「等待(Waits)」機制,可以讓Python爬蟲程式更為穩定。
Q:如何使用Python Selenium套件的sleep()等待機制?
sleep()是強制程式碼停止執行所給定的時間,不論元素是否存在或網頁提早載入完成,都需等待給定的時間,才往下執行,並且每一次需要等待時,就要設定一次,如下範例:
browser = webdriver.Chrome(ChromeDriverManager().install())
time.sleep(20) # 強制等待20秒
search_input = browser.find_element_by_id("keyword")
Q:如何使用Python Selenium套件的Implicit Waits(隱含等待)?
Implicit Waits相較於sleep(強制等待),Implicit Waits(隱含等待)的等待時間是全域性,同樣能夠設定程式碼的等待時間,不過,如果「整個網頁」提早載入完成,就會往下執行,這邊要特別注意的是,就算要尋找的元素已經載入完成,還是需等待「整個網頁」載入完成,才會往下執行。
browser = webdriver.Chrome(ChromeDriverManager().install())
browser.implicitly_wait(20) # 隱含等待20秒
search_input = browser.find_element_by_id("keyword")
Q:如何使用Python Selenium套件的Explicit Waits(明確等待)?
Explicit Waits(明確等待)提供了until()及until_not()方法(Method),語法說明如下:
1.until():符合指定的等待條件。
WebDriverWait(driver, 等待的最長時間, 檢查條件的頻率, 忽略的例外類別).until(expected_conditions條件, 超時例外的錯誤訊息)
2.until_not():不符合指定的等待條件。
WebDriverWait(driver, 等待的最長時間, 檢查條件的頻率, 忽略的例外類別).until_not(expected_conditions條件, 超時例外的錯誤訊息)
Explicit Waits(明確等待)可以針對特定的元素,設定等待的最長時間及條件,當符合所設定的等待條件,程式碼就會往下執行,反之,如果不符合條件,則會一直等待到所給的最長時間,如果還是不符合條件,則會產生TimeoutException,如下範例:
browser = webdriver.Chrome(ChromeDriverManager().install())
browser.get("https://shopping.pchome.com.tw/") # 前往PChome網站
# 明確等待
locator = (By.ID, "keyword") # 定位器
search_input = WebDriverWait(browser, 10).until(
EC.presence_of_element_located(locator),
"找不到指定的元素"
)
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2020/06/python-selenium-waits.html )網站觀看更多精彩內容。
3 0 459 0