## 第二堂爬蟲(Selenium) ### Author: 張佑丞 ---- 上禮拜說到了網路如何接收訊息的 這禮拜講講如何爬取我們想要的東西 --- ## Selenium Tools ---- 這是一個Python的爬蟲套件 但需要在程式碼中引用 webdriver 的程式 ---- 下載Webdriver ---- 需要依照你使用的瀏覽器版本跟種類選擇 我們先確認電腦的版本 ---- 進入[Selenium官網](https://www.selenium.dev/) 依序點選 Documentation->WebDriver ->Getting Started->Install Drivers 選擇合適瀏覽器跟版本即可 --- ## 今天的目標 ---- 將校網的重要消息列出來 如下所示 ![](https://i.imgur.com/GrMR0xE.png) --- ## 在Python中使用Selenium ---- > 本次課程以Chrome作為介紹 > 雖然我是Edge派的 打開VS Code建立新python檔案 ---- 先將剛才傳的webdriver檔案放在同一個目錄中 像這樣 ![](https://i.imgur.com/ILCpkMD.png) ---- 在Python中引入對應函式 ```python= from selenium import webdriver driver = webdriver.Chrome() ``` 執行看看會發生甚麼事 ---- 接下來我們再輸入 ```python= driver.get('https://www.sssh.tp.edu.tw/home') ``` 讓網頁前往學校官網 --- ## 尋找元素(Element) ---- Selenium中有很8種定位元素的方式: 1. id 2. name 3. class_name 4. tag_name 5. link_text 6. partial_link_text 7. css_selector 8. xpath ---- 我們挑幾個來使用 --- ## 定位標題文字 ---- 看一下標題的元素在哪裡(右鍵-檢查) ![](https://i.imgur.com/qz5lh6v.png) 這次我們使用xpath看看 ---- ## Xpath特色 1. 唯一性(沒有其他元素跟他長得一樣) 2. 有相同規律者 ---- 輸入這行程式碼進去 ```python= TitleName = driver.find_element_by_xpath('//*[@id="title"]') print(TitleName.text) ``` 然後執行 注意一下這裡是用```fnd_element```,不要選錯喔! ---- 我們可以發現程式正確地找到我們想要的資料了! --- ## 定位每項標題跟處室資訊 ---- 我們發現這些資訊都包含在一個大框框中 所以我們可以先定位這個大框框 ---- 找一下大框框的元素 ![](https://i.imgur.com/NQzORb1.png) > 當然你不一定要跟我一樣,你也可以選擇下面那個 ---- 這次我們使用id來定位 輸入程式碼 ```python= news_table = driver.find_element_by_id('div_news_table_1') ``` ---- 接下來我們定位各個標題跟處室 ---- 一樣找到標題跟處室的元素 ![](https://i.imgur.com/RZXVhPu.png) 這次我們分別使用css_selector跟class_name ---- 輸入以下程式 ```python= titles = news_table.find_elements_by_css_selector('a') departments = news_table.find_elements_by_class_name('ctrl') ``` 注意一下這裡是用```fnd_elements```跟上面有點不同喔! 因為這樣才能一次找到全部,回傳值為一個list ---- 最後將大家都輸出吧! ```python= print(TitleName.text) for i in range (5): print(titles[i].text, departments[i].text) ``` --- ## 關閉driver ---- 最後結束時不要忘記關掉瀏覽器喔 使用以下程式 ```python= driver.close() ```
{"metaMigratedAt":"2023-06-16T21:14:28.195Z","metaMigratedFrom":"YAML","title":"第二堂爬蟲(Selenium)","breaks":true,"contributors":"[{\"id\":\"21fee6b9-69f8-4dd6-ad87-e0b14779a2eb\",\"add\":2069,\"del\":23}]"}
    284 views