iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
自我挑戰組

待業不頹廢系列 第 12

Day 12 . 欸 今天要幹嘛 - python 動態爬蟲(下)

  • 分享至 

  • xImage
  •  

行前提要

進度如下:

  1. ✅ 安裝 Selenium
  2. ✅ 瀏覽器版本確認
  3. ✅ 下載對應的 WebDriver
  4. ✅ 安排路徑
  5. 編寫程式碼

編寫程式碼

完成安裝和配置 ChromeDriver,接下來的步驟是寫 code 啦
使用 Selenium 來控制 Chrome 瀏覽器進行動態網頁爬取或自動化操作。

  • 導入 Selenium,才能使用 Selenium 的功能

    from selenium import webdriver
    
  • ChromeDriver 路徑 (不是每次都要,看需求)
    除非有特定情況需要選擇不同路徑,再來寫下面兩行即可:指定 ChromeDriver 路徑
    💥特別注意 executablepath 是固定用法唷 這個參數來允許自定義ChromeDriver的位置。
    (起初我們已經手動設定、指令示範過,在不需要額外指定情況下,下面兩行是不需要存在的。)

     # 若要重新指定路徑
    chrome_driver_path = "/path/to/chromedriver"
    driver = webdriver.Chrome(executable_path=chrome_driver_path)
    

    範例:有多個項目,每個項目需要不同版本的 ChromeDriver,可以為每個項目設置不同的 executable_path,以確保它們使用正確的 ChromeDriver。

    from selenium import webdriver
    
    # 項目1使用的 ChromeDriver 路徑
    chrome_driver_path_project1 = "/path/to/chromedriver_project1"
    driver_project1 = webdriver.Chrome(executable_path=chrome_driver_path_project1)
    
    # 項目2使用的 ChromeDriver 路徑
    chrome_driver_path_project2 = "/path/to/chromedriver_project2"
    driver_project2 = webdriver.Chrome(executable_path=chrome_driver_path_project2)
    

    這樣,你可以為每個項目或需要不同版本 ChromeDriver 的情況選擇不同的路徑。
    然後在程式碼中,只需根據項目的需要指定不同的路徑即可。

  • 初始化 Chrome WebDriver

    driver = webdriver.Chrome()
    
  • 打開網頁:使用 get 方法打開你要爬取的網頁

    driver.get("https://example.com")
    
  • Selenium 的各種方法進行操作:(各項操作 or 自動化)
    使用 Selenium 的各種方法來與元素互動、網頁進行交互,例如查找元素、點擊按鈕、填寫表單等。
    查找元素:使用 Selenium 的不同方法,不需要自己命名,而是 Selenium 提供的預定義方法來使用。(如 find_element_by_id、find_element_by_class_name、find_element_by_xpath 等)來定位網頁上的元素。

    element = driver.find_element_by_id("some_element_id")
    element.click()
    

    上方程式碼中 element.click() 代表:執行點擊操作。
    有點像是 做些操作 driver.find 些什麼 @%^)(&^%$#@ 等方法來定位元素,然後 element.click() 執行那些動作
    driver.find_element_by... 是固定的,後面是看需要找什麼就寫什麼。

    driver.find_element_by_id("element_id"):根據元素的 ID 來查找。
    driver.find_element_by_name("element_name"):根據元素的名稱來查找。

    driver.find_element_by_xpath("xpath_expression"):根據 XPath 表達式來查找。
    driver.find_element_by_link_text("link_text"):根據連結文本來查找。
    driver.find_element_by_partial_link_text("partial_link_text"):根據部分連結文本來查找。

    driver.find_element_by_tag_name("tag_name"):根據元素的標籤名來查找。
    driver.find_element_by_class_name("class_name"):根據元素的類名來查找。
    driver.find_element_by_css_selector("css_selector"):根據 CSS 選擇器來查找。

    如果要查找具有類名 "class1" 和 "class2" 的元素,可以這樣做:

    element = driver.find_element_by_css_selector(".class1.class2")
    

    element 是通過使用 driver.find_element_by_id("some_element_id") 方法找到的網頁上的特定元素,該元素具有 id 屬性為 "some_element_id"。然後,element.click() 動作會觸發這個元素上的點擊事件,就好像用戶在頁面上實際點擊了這個元素一樣。

    這對於與網頁進行自動化交互非常有用,例如在測試、爬蟲或自動化任務中,可能需要模擬用戶與網頁上的元素進行互動,例如單擊按鈕、連接或輸入文本。
    💥💥 特別注意,如果這樣的寫法沒有效果請參考 Day 16,已找到更好的方式 💥💥

  • 提取數據:
    使用Selenium來提取你需要的數據,例如從頁面中獲取文本、連結或其他元素。

    data = driver.find_element_by_css_selector("p").text
    
  • 清理和關閉: driver.quit() 要幹嘛
    在完成操作後,確保關閉Chrome瀏覽器,以釋放資源。

    driver.quit()
    

    driver.quit() 是一個非常重要的步驟,它用於關閉打開的 Chrome 瀏覽器窗口和終止與瀏覽器的 Selenium 對話。在完成自動化任務後,最好始終使用 driver.quit() 來關閉瀏覽器,以確保資源被釋放並且瀏覽器會被正確地關閉。

不關閉瀏覽器可能會導致以下問題:

  • 資源洩漏:
    如果不關閉瀏覽器,那麼瀏覽器進程可能會繼續運行,佔用系統資源(例如內存和 CPU )。如果你的自動化腳本運行多次,這些未關閉的瀏覽器進程可能會導致資源洩漏,最終影響系統性能。
  • Selenium 會話未終止:
    如果不使用 driver.quit(),Selenium 會話將保持活動狀態,這可能會導致一些問題,如瀏覽器窗口的狀態未正確重置,或者無法啓動新的 Selenium 會話。

因此,無論你的自動化任務是多麼短暫或複雜,都建議在任務結束後使用 driver.quit() 來關閉瀏覽器。這是一種良好的編程實踐,可以確保你的自動化腳本在執行後能夠正常地清理資源並終止瀏覽器進程。

小結

基本起手式如下

from selenium import webdriver
#初始化 Chrome WebDriver
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
#打開網頁
driver.get('https://example.com')
#進行其他自動化操作...

#關閉瀏覽器
driver.quit()

有點基本程式碼的架構出來,明天就來實作,爬看看會出現什麼東西


上一篇
Day 11 . 欸 今天要幹嘛 - python 動態爬蟲 (上)
下一篇
Day 13 . 欸 今天要幹嘛 - 跟著做 寫出python 動態爬蟲
系列文
待業不頹廢30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言