##事先準備
首先我們先引入這四個模組,同時這一篇文章也會簡單地帶大家認識這幾個模組。
from selenium import webdriver
import pyautogui
import openpyxl
import time
使用selenium之前我們必須要先下載chromedriver,讀者可以到其官網上下載最新版本。 driver = webdriver.Chrome(PATH)這是設定我們待會所使用的瀏覽器是Chrome並且傳入chromedriver。之後使用get函數就可以到我們想要到的網頁。
PATH = "C:/Users/user/Desktop/chromedriver_win32/chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://www.youtube.com/channel/UC8zkK0-g8S8Z_t8ZjUmpAlA/videos")
之後我們開啟一個Excel的檔案,並且待會檔案會讀寫在工作表1。
openpyxl.load_workbook(filename=)可以開啟Excel檔案,sheet=workbook['工作表1']指定我們等一下要操作檔案的工作表。
path1='77老大.xlsx'
workbook=openpyxl.load_workbook(filename=path1)
sheet=workbook['工作表1']
##一些簡易的pyautogui操作
進入該網頁後,使用模組pyautogui點擊視窗的最大化、滾輪,之後按鍵盤的PgDn讓頁面往下滑。pyautogui.locateCenterOnScreen()是一個很好用的函數,它可以偵測你所傳入的圖片(這邊傳入的是「視窗最大化」「視窗滾輪」的截圖),進行辨識,回傳找到的位置。再利用pyautogui.click()來點擊。
(這個部分其實也可以用selenium內建的程式來編寫,只不過用pyautogui更為直觀)
pyautogui.click((pyautogui.locateCenterOnScreen('最大化1.png', grayscale=True)))
time.sleep(2)
pyautogui.click((pyautogui.locateCenterOnScreen('滾輪.png', grayscale=True)))
time.sleep(1)
for i in range(30):
pyautogui.press('pgdn')
time.sleep(0.5)
##爬取資料~!
Selenium最常所使用的函數就是find_element相關函數,我們可以使用網頁標籤的id、class等等屬性進行爬取(不過稍有經驗的工程師通常使用xpath、css selector,這裡先不提)。具體的操作方式在我們所處的網頁上,按下鍵盤的f12,之後網頁會跳出一個「開發者工具」,在element 難為可以看到網頁的html,裡面有各種標籤。 find_elements_by_id("video-title")就是查詢所有id="video-title"的標籤。
titles=driver.find_elements_by_id("video-title")
number=1
for title in titles:
sheet.cell(row=number,column=1).value=title.get_attribute('text')
sheet.cell(row=number,column=5).value=title.get_attribute('href')
number+=1
print(number)
workbook.save(r'77老大.xlsx')
今天只是一個非常簡略的介紹,之後我們還會再繼續使用這些函數,到時再進行詳細的介紹。
最大化應該要直接 selenium call 比較好?
如果是用 remote 或 headless 的 drier 就沒有辦法用 autogui 了
是的,driver.maximize_window() 是我平常所使用的方法。只不過我一開始是使用pyautogui,而且我覺得pyautogui很好玩也很喜歡,故向大眾來推薦。謝謝'你的關注