至於起源並不是本篇的重點,就不詳談了 有興趣的話請看參考資料1
在進入主題前 先來介紹一些基本環境
電腦環境
作業系統:Windows7
程式語言:Python 2.7
瀏覽器:Google Chrome
了解之後 廢話不多說 馬上進入正題
網路爬蟲運作的基本原理
模擬用戶使用瀏覽器輸入網址並透過HTTP協定中的GET方法送出一個請求(Request)到遠端的伺服器(Server),伺服器接受請求後,就會回應(Response)並回傳網頁內容(原始碼)的檔案回來,再經由瀏覽器轉譯後變成漂亮的網頁。
(Crawler運作原理)
對於Crawler而言,它看到並不是漂亮的畫面而是網頁原始碼,那麼我們要如何知道網站是用什麼方法送出請求
以Chrome瀏覽Google網站為例
1.在網頁上按F12 叫出開發者人員工具
2.在上面的頁籤看到Network
3.按F5重新整理頁面
4.看到結果 請求是用GET方法送出
(開發者人員工具觀測結果)
原理明白之後 就開始進入實作的階段,即用Python實際地寫出一個簡單的Crawler
驗證理論是否正確 這樣才有感覺的...
一開始先安裝Python程式語言(廢話),就點下一步下一步就裝完了... (輕鬆帶過)
值得注意的地方是版本是用2.7.x 而不是3.x
驗證理論是否正確 這樣才有感覺的...
安裝Python及相關套件在Windows上
一開始先安裝Python程式語言
值得注意的地方是版本是用2.7.x 而不是3.x
為什麼? 根據大家在網路上的討論 我整理之後有兩個主要原因:
- 目前大部分的套件(Package),2.7.x在支援上較為完整,線上的教學文章也是最豐富的,反之3.x支援的Package少,支援度差且安裝上容易發生錯誤即不相容,教學文章自然就少。
- 依照學習趨勢來看,3.x會成為主流而2.7.x會逐漸被淘汰,目前2.7.x改版只是修正一些bug,將來就會停止更新,全力推廣3.x,其中較明顯的原因之一是2.7.x令人詬病的bug 在3.x得到改善,例如:2.7.x是用ASCII解讀程式碼,而3.x是用UTF-8,如果是預設以外的編碼就必須在第一行放置編碼聲明(encoding declaration),想了解編碼的細節請看參考資料4。
套件來源
Python本身有著許多的套件可以使用,那這些套件都放在哪裡? 想當然是在網路上的某個網頁啦(廢話)
(PyPI官方網站)
套件管理程式
這麼多套件,我要怎麼安裝並拿來運用或是哪天這個套件不符合需求,又要怎麼移除?
在做程式開發時遇到這些問題要如何處理? 這時候管理套件這件事就顯得特別重要
管理套件程式簡單的講,就像是Windows控制台的新增移除工具一樣,有安裝、移除等功能。
以下就來介紹 easy_install 以及 pip 這兩個Python的管理套件程式怎麼用?
原本Python2.7.9版中沒有內建安裝 easy_install 和 pip
而這次的更新(2.7.10)就有內建,所以就不必再像之前一樣做繁雜的安裝動作,可以直接使用了(灑花),想知道詳細的指令和原由請看參考資料5。這裡就不詳述了。
以下是列出自己常用的指令:
1.安裝套件:
easy_install [套件名稱]
在做程式開發時遇到這些問題要如何處理? 這時候管理套件這件事就顯得特別重要
管理套件程式簡單的講,就像是Windows控制台的新增移除工具一樣,有安裝、移除等功能。
以下就來介紹 easy_install 以及 pip 這兩個Python的管理套件程式怎麼用?
原本Python2.7.9版中沒有內建安裝 easy_install 和 pip
而這次的更新(2.7.10)就有內建,所以就不必再像之前一樣做繁雜的安裝動作,可以直接使用了(灑花),想知道詳細的指令和原由請看參考資料5。這裡就不詳述了。
以下是列出自己常用的指令:
easy_install
easy_install [套件名稱]
2.移除套件:
easy_install -m [套件名稱]
3.升級套件:
easy_install -U [套件名稱]
4.列出使用範例:
easy_install --help
easy_install -U [套件名稱]
4.列出使用範例:
easy_install --help
pip
1.安裝套件:
pip [套件名稱]
2.移除套件:
pip uninstall [套件名稱]
3.列出所有已安裝的套件:
pip list
4.升級套件:
pip install -U [套件名稱]
5.列出使用範例
pip --help
這兩個都是管理套件程式那有什麼差別?
以下列舉自己用到現在的感想,細節請看參考資料6
1.pip能夠下載並自動安裝套件,easy_install只是下載下來,但是要手動下指令安裝套件。
2.pip的許多指令能夠自動化並且簡化許多功能,easy_install反之。
結論: 建議使用者在管理套件時,以 pip 為主,easy_install 為輔,因為 pip 仍持續開發中,有時候會發現某些套件無法使用 pip 安裝,但是卻可以用 easy_install 安裝。
如果使用 pip 及 easy_install 都無法安裝成功時。使用者不妨直接進入套件目錄,看該套件是否有提供 setup.py 檔案。按住Shift鍵點選滑鼠右鍵看到在此處開啟命令視窗,在命令列模式下輸入下列指令:
python setup.py install
Python套件
這次的爬蟲需要用到三個套件 分別介紹一下:
Beautiful Soup4 : 解析HTML元素的套件。
lxml : 處理XML及HTML的編譯器套件。
pip install requests BeautifulSoup4
驗證套件是否安裝成功,進入Python主控台輸入
import requests
from bs4 import BeautifulSoup
沒有錯誤訊息就代表安裝成功
(驗證套件安裝成功畫面)
以上的內容都了解了 ,接著就可以嘗試撰寫一隻簡單的爬蟲
這裡將用前面章節提到的Requests套件實現GET方法並取得整個網頁的內容
Step1:
確認該網站是用什麼方法發出請求到遠端的伺服器,這部分可以用Chrome開發者人員工具來得知。
Step2:
知道網站是用什麼方法之後,撰寫程式碼取得網頁內容
以下為程式碼
如果我只要網頁裡的特定資訊 如:新聞標題、內文,而不是要整個網頁內容 要怎麼寫?
這時要使用Beautiful Soup4來解析網頁的DOM結構
透過指定特定的元素就可以取得我們要的新聞資訊,如果不知道DOM請看參考資料8 這裡就不介紹了...
Step1:
用Chrome開發者人員工具確認該網站是用什麼方法
Step2:
撰寫程式碼取得特定的元素,以下為程式碼
最後來介紹可以幫助你提升撰寫爬蟲效率的好工具
細節請看參考資料3
2.Cmder:Windows平台最好用的cmd 。
解決中文字重疊的問題
開啟 Cmder 的 Setting 視窗,取消勾選 Main console font 下的 Monospace。
3.InfoLite:用滑鼠標示出網頁的元素。
使用教學:https://www.youtube.com/watch?v=_zv0IXEQxMA
4.Jupyter:一個網頁介面的文字編輯器,並能夠在上面撰寫程式碼、建立檔案以及執行檔案。
安裝教學:https://www.youtube.com/watch?v=xWICyTVSIQs
進階操作:https://www.youtube.com/watch?v=lWkcP4xF8wI
撰寫爬蟲
網站:某個知名的新聞網站(怕造成困擾不公佈)
用GET方法取得網頁
那GET方法是什麼?
廣義的來講就是HTTP協定的一種方法,不過這樣講沒人聽得懂甚至無感。
簡單的說明就像是明信片一樣,將內容寫在上面送出,那GET的方法也是一樣,將要送的內容寫在網址列上送出。想知道更清楚請看參考資料7
這裡將用前面章節提到的Requests套件實現GET方法並取得整個網頁的內容
Step1:
確認該網站是用什麼方法發出請求到遠端的伺服器,這部分可以用Chrome開發者人員工具來得知。
Step2:
知道網站是用什麼方法之後,撰寫程式碼取得網頁內容
以下為程式碼
如果我只要網頁裡的特定資訊 如:新聞標題、內文,而不是要整個網頁內容 要怎麼寫?
這時要使用Beautiful Soup4來解析網頁的DOM結構
透過指定特定的元素就可以取得我們要的新聞資訊,如果不知道DOM請看參考資料8 這裡就不介紹了...
開始實作
Step1:
用Chrome開發者人員工具確認該網站是用什麼方法
Step2:
撰寫程式碼取得特定的元素,以下為程式碼
最後來介紹可以幫助你提升撰寫爬蟲效率的好工具
1.Postman – REST Client:測試API的Chrome Extension。
細節請看參考資料3
2.Cmder:Windows平台最好用的cmd 。
解決中文字重疊的問題
開啟 Cmder 的 Setting 視窗,取消勾選 Main console font 下的 Monospace。
3.InfoLite:用滑鼠標示出網頁的元素。
使用教學:https://www.youtube.com/watch?v=_zv0IXEQxMA
4.Jupyter:一個網頁介面的文字編輯器,並能夠在上面撰寫程式碼、建立檔案以及執行檔案。
安裝教學:https://www.youtube.com/watch?v=xWICyTVSIQs
進階操作:https://www.youtube.com/watch?v=lWkcP4xF8wI
下節將介紹在不同情況下爬蟲如何收集資料的概念及應用...
參考資料
2.超文本傳輸協定