想要利用Python網頁爬蟲蒐集網路上的資料,除了一般網頁之外,有些還會需要進行"登入"的動作,才會顯示網頁資料,這也就是所謂的登入型網頁,最常見的像是Facebook、Instagram等社群網站。
這時候就可以利用Python的Selenium套件來模擬登入的動作,進而爬取到想要的資料。這篇文章我就用Facebook網站為例,來教大家Python網頁爬蟲如何利用Selenium套件來自動化登入網站。
- Python Selenium網頁爬蟲專案初始化
- Python網頁爬蟲輸入登入資料
- Python網頁爬蟲登入網站
一、Python Selenium網頁爬蟲專案初始化
在開始實作之前,先利用以下指令安裝Selenium、Webdriver Manager套件:
$ pip install selenium webdriver-manager
接著,建立Python網頁爬蟲檔案,引用Selenium相關的模組,如下:
from selenium import webdriver # 瀏覽器驅動模組 from webdriver_manager.chrome import ChromeDriverManager # Chrome瀏覽器驅動模組 from selenium.webdriver.chrome.options import Options # 瀏覽器選項設定模組 from selenium.webdriver.common.by import By # 定位元素模組 import time # 時間模組
詳細的Selenium模組介紹及引用時機,可以參考全面掌握Selenium建置動態網頁爬蟲的步驟與重要模組文章,對於後續想要利用Python網頁爬蟲爬取動態網頁的朋友,一定要學起來!
引用好之後,就可以建立Selenium的瀏覽器驅動物件,發送請求到Facebook網站,如下範例:
options = Options() options.add_argument("--disable-notifications") # 取消瀏覽器的通知訊息 # 安裝及啟動Chrome瀏覽器 driver = webdriver.Chrome(ChromeDriverManager().install(), chrome_options=options) # 發送請求到Facebook網站 driver.get('https://www.facebook.com/')
二、Python網頁爬蟲輸入登入資料
再來,就要定位帳號、密碼欄位,來輸入登入資料。打開Facebook網站,在帳號、密碼輸入框的地方點擊滑鼠右鍵,選擇「檢查」,可以分別看到它們的原始碼如下:
回到Python網頁爬蟲檔案,利用Selenium套件的By模組,來定位帳號、密碼欄位,如下範例:
# 定位帳號欄位 email = driver.find_element(By.ID, "email") # 定位密碼欄位 password = driver.find_element(By.ID, "pass")
呼叫Selenium套件的send_keys()方法,分別輸入帳號、密碼資料,如下範例:
# 定位帳號欄位 email = driver.find_element(By.ID, "email") # 定位密碼欄位 password = driver.find_element(By.ID, "pass") # 輸入帳號欄位資料 email.send_keys("你的帳號") # 輸入密碼欄位資料 password.send_keys("你的密碼")
三、Python網頁爬蟲登入網站
輸入完資料之後,就可以呼叫Selenium套件的submit()方法,送出帳號、密碼等表單資料,進行登入的動作,如下範例:
#定位帳號欄位 email = driver.find_element(By.ID, "email") #定位密碼欄位 password = driver.find_element(By.ID, "pass") #輸入帳號欄位資料 email.send_keys("你的帳號") #輸入密碼欄位資料 password.send_keys("你的密碼") #送出表單資料 password.submit()
執行程式碼,就可以看到Python網頁爬蟲自動化登入網站了。
四、小結
以上就是Python網頁爬蟲自動化登入網站的3個步驟,基本上,就是利用Selenium套件發送請求到目標網站,定位需要輸入的登入欄位元素,輸入資料且送出之後,就可以進行登入的動作。接下來,可以接續看整合Python Selenium及BeautifulSoup實現動態網頁爬蟲文章,學會如何爬取登入後的網頁資料。
你可能有興趣的文章
留言
張貼留言