## 第二堂爬蟲(Selenium)
### Author: 張佑丞
----
上禮拜說到了網路如何接收訊息的
這禮拜講講如何爬取我們想要的東西
---
## Selenium Tools
----
這是一個Python的爬蟲套件
但需要在程式碼中引用 webdriver 的程式
----
下載Webdriver
----
需要依照你使用的瀏覽器版本跟種類選擇
我們先確認電腦的版本
----
進入[Selenium官網](https://www.selenium.dev/)
依序點選
Documentation->WebDriver
->Getting Started->Install Drivers
選擇合適瀏覽器跟版本即可
---
## 今天的目標
----
將校網的重要消息列出來
如下所示

---
## 在Python中使用Selenium
----
> 本次課程以Chrome作為介紹
> 雖然我是Edge派的
打開VS Code建立新python檔案
----
先將剛才傳的webdriver檔案放在同一個目錄中
像這樣

----
在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
----
我們挑幾個來使用
---
## 定位標題文字
----
看一下標題的元素在哪裡(右鍵-檢查)

這次我們使用xpath看看
----
## Xpath特色
1. 唯一性(沒有其他元素跟他長得一樣)
2. 有相同規律者
----
輸入這行程式碼進去
```python=
TitleName = driver.find_element_by_xpath('//*[@id="title"]')
print(TitleName.text)
```
然後執行
注意一下這裡是用```fnd_element```,不要選錯喔!
----
我們可以發現程式正確地找到我們想要的資料了!
---
## 定位每項標題跟處室資訊
----
我們發現這些資訊都包含在一個大框框中
所以我們可以先定位這個大框框
----
找一下大框框的元素

> 當然你不一定要跟我一樣,你也可以選擇下面那個
----
這次我們使用id來定位
輸入程式碼
```python=
news_table = driver.find_element_by_id('div_news_table_1')
```
----
接下來我們定位各個標題跟處室
----
一樣找到標題跟處室的元素

這次我們分別使用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}]"}