---
# System prepended metadata

title: Python 新手爬蟲Part.1
tags: [爬蟲]

---

---
title: 'Python 新手爬蟲'
disqus: hackmd
---

Python 新手爬蟲 Part.1 抓取文字
===

## 目錄

[TOC]

## 使用環境

這裡我所使用的環境是anaconda裡面的Spyder，當然要使用Jupyter、Pycharm也是可以的！

在爬蟲前需要先安裝一些Packages來幫助我們爬蟲，而在Part.1的部分我們只需要先用到selenium與openpxyl，前者是用來幫助我們爬蟲，後者是方便我們把資料蒐集好放在EXCEL裡面。

> 這邊是示範anaconda最便捷的安裝方式，若有其他套件安裝問題，像是Pyecharts安裝不了可以來信，或是有時間再跟大家介紹不能使用該怎麼做
> 

### 如何安裝：

#### 法一

>打開anaconda

![](https://hackmd.io/_uploads/Hyo6MMVWT.png)

>點選Environments
![](https://hackmd.io/_uploads/ry8-7G4Z6.png)

>把installed下拉選單改成All，在右側輸入selenium
>把左側的selenium打勾
>右下角會出現Apply，按下去後會跳出要不要下載，點選確定即可

![](https://hackmd.io/_uploads/ryewXfVZa.png)

#### 法二

> 一、按下鍵盤win+R，輸入cmd 
> 二、打開命令提示字元
> 三、輸入 pip install selenium

### Chromedriver.exe

在開始爬蟲之前我們還需要下載一個Chromedriver，下面我貼了兩個網址，一個是可以安裝較舊版的，一個是新版的，可以自己選擇想要安裝的版本

> 新版：https://googlechromelabs.github.io/chrome-for-testing/
> 舊版：https://chromedriver.chromium.org/downloads/version-selection

將下載下來的driver放在你認得的路徑(很重要！！！等等就會用到！！！)


怎麼抓取網頁元素？
---
> 對著你想要檢查的網頁元素，滑鼠移過去後按右鍵，並點擊檢查


![](https://hackmd.io/_uploads/ByoxWXNbp.png)

> 有時候跳出來的是整個body，這時候再對你感興趣的網頁元素再按一次檢查

![](https://hackmd.io/_uploads/rJOIbQNWa.png)

> 這時候滑鼠移過去檢查的位置，你就能看到相應的元素
> 你會發現裡面有很多東西，這次我們用到的只有name跟XPATH

![](https://hackmd.io/_uploads/HyeKb7NWp.png)

> XPATH這樣找
> 對你有興趣的網頁元素按右鍵，移到COPY，裡面就有XPATH了
> 【通常】是用來對一些沒有特色的元素進行選取


![](https://hackmd.io/_uploads/HkTj-mEbT.png)

都處理好，擁有些微基礎後就可以打開Python來舒暢爬蟲了！

開始爬蟲
---
> 首先我們從selenium裡面挖我們要的模組，你可以直接import，但我們不需要那麼多，選需要的模組就好
> 
> 語法是：from 套件 import 裡頭的模組 
> (之後任何套件都是這樣的邏輯，比較細的安裝可以參考我之前的Python筆記)
```gherkin=
# 導入selenium packages
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from openpyxl import Workbook        # 載入EXCEL表格套件
import time

```
### 設定Chrome Driver
> 載入完模組後，我們接著設定chrome.exe

```gherkin=
# 建立Driver物件實體，用程式操作瀏覽器
driver = webdriver.Chrome("你的chromedriver路徑")
```
### 創建EXCEL表格
> 這裡我們以Youtube搜尋Toyz為例子
```gherkin=
work = Workbook()   # 創建EXCEL
w_sheet = work.active  # 使用預設工作表

tit = ['搜尋TOYZ youtube標題'] # 設定你的EXCEL標題
w_sheet.append(tit) # 將標題寫進excel第一排
```
### 連線至Youtube首頁
> dirver.get("裡面放你想要去的網址")
```gherkin=
driver.get("https://www.youtube.com/")
```

### 搜尋 Toyz

```gherkin=
search = driver.find_element_by_name('search_query') # 找出搜尋欄的元素
search.clear()                                       # 先清空搜尋欄(有些網站裡面會預先留有東西)
keywords = ("Toyz")                                  # 搜尋關鍵字
search.send_keys(keywords)                           # 在搜尋欄輸入名稱
search.send_keys(Keys.RETURN)                        # 按下enter鍵
```

### 抓取標題
> 有些人可能會有疑問，為什麼這裡要time.sleep()?
> 因為搜尋完網頁需要時間去載入，如果網頁還沒加載出來就執行程式碼，就會找不到元素而出現錯誤訊息。
> 
> 其實有WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH,'')
> 這種看到某樣元素才執行的程式碼，但這裡先不贅述。
```gherkin=
time.sleep(3)
titles = driver.find_elements(By.CLASS_NAME, "style-scope ytd-video-renderer")
for i in titles: # 利用for迴圈遍歷
    print(i.text)
    w_sheet.append([i.text])

```

### 存取標題

```gherkin=
work.save('youtube_title.xlsx')    # 命名並存入EXCEL
driver.close() # 關閉網頁
```


> 至此我們在Youtube搜尋了Toyz，並且將標題下載下來，儲存至EXCEL表格裡
> 儲存位置預設在C:\user\使用者\你儲存的標題.xlsx


## 結論

    我們在前頭使用了selenium、openyxl與time套件，透過裡頭的模組進行Youtube標題的爬取，當然並不是爬取
    全部，只是爬取一點點的內容，之後關於如何大量爬取、怎麼爬取會以爬取圖片作為範例示範
    


##  FAQ

:::info
**Find this document incomplete?** Leave a comment!
:::

