iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0
自我挑戰組

使用python撰寫簡單的程式來增進日常生產力系列 第 2

selenium爬蟲:爬取影片名稱與連結

##事先準備
首先我們先引入這四個模組,同時這一篇文章也會簡單地帶大家認識這幾個模組。

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')

今天只是一個非常簡略的介紹,之後我們還會再繼續使用這些函數,到時再進行詳細的介紹。


上一篇
為甚麼每個人都應該用程式增進日常生產力?
下一篇
自動化初步-使用pyautogui
系列文
使用python撰寫簡單的程式來增進日常生產力6

1 則留言

0
obarisk
iT邦新手 4 級 ‧ 2021-09-18 11:44:47

最大化應該要直接 selenium call 比較好?

obarisk iT邦新手 4 級 ‧ 2021-09-18 11:45:44 檢舉

如果是用 remote 或 headless 的 drier 就沒有辦法用 autogui 了

是的,driver.maximize_window() 是我平常所使用的方法。只不過我一開始是使用pyautogui,而且我覺得pyautogui很好玩也很喜歡,故向大眾來推薦。謝謝'你的關注

我要留言

立即登入留言