--- 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! :::