網際網路的盛行,日常生活中充滿了大量的資訊,也因此越來越多的使用者會利用Python網頁爬蟲技術,來蒐集想要的資料,藉此來進行分析及應用,為了讓讀者能夠快速入門Python網頁爬蟲,本文想來和大家分享在開發前,需要知道的五個基本觀念,包含:
- 什麼是網頁爬蟲
- 網路的運作方式
- 網頁的基本結構
- 常見的套件及框架
- 網頁爬蟲開發流程
一、什麼是網頁爬蟲
網頁爬蟲可以把它想像成是一種網頁機器人,能夠依照特定的模式或規則,自動化擷取網頁原始碼,來進行解析取得資料,所以被大量的應用在網頁資料蒐集。
當然網頁爬蟲部一定只能使用Python來進行實作,其它像Java、C#及JavaScript等程式語言也可以,而因為Python語法簡潔及擁有許多成熟的套件與框架,所以筆者選擇Python來開發網頁爬蟲。
二、網路的運作方式
Python網頁爬蟲事實上就是模擬使用者來瀏覽網頁,這時候就需要瞭解網路的基本架構,分為用戶端(Client)及伺服端(Server)。
其中,用戶端(Client)就是使用者瀏覽網頁的裝置(例:本機電腦),當使用者點擊網頁時,也就代表請求(Request)的動作,存取該網頁連結的伺服端(Server),而伺服端(Server)接收連結得知使用者所要看的網頁後,將內容回應(Response)給用戶端(Client),如下圖:
這樣的網路運作方式就跟點餐的流程非常相似,當我們進到一間餐廳看著菜單,就像到一個網站瀏覽其中的網頁,接著,到櫃檯向老闆點餐的動作就像是看到喜歡的網頁,請求(Request)伺服端(Server)想看的網頁,最後,等待老闆烹飪完成送到餐桌上,像是伺服端(Server)端處理完成回應(Response)給使用者。而在開發Python網頁爬蟲時,這邊有兩個重要的觀念,分別是:
- 請求方法(Request Method)
- 等待回應(Waits)
請求方法(Request Method)基本上分為四種,包含GET(查詢)、POST(新增)、PUT(修改)及DELETE(刪除),由於Python網頁爬蟲大部分皆是查詢伺服端(Server)想要存取的網頁,所以請求方法(Request Method)都是使用GET(查詢)。
另外,等待(Wait)伺服端(Server)的回應(Response)也非常重要,由於Python網頁爬蟲執行的速度非常快,如果沒有適時的等待(Wait),就進行擷取解析,有時就會發生爬取不到網頁原始碼的問題,就像是點完餐後,是無法立刻拿到餐點的,也是需要等待老闆的烹飪才能取得。詳細的觀念可以參考[Python爬蟲教學]3個建構Python動態網頁爬蟲重要的等待機制。
三、網頁的基本結構
伺服端(Server)回應(Response)給使用者時,事實上是網頁原始碼,經過瀏覽器的解析後,才顯示網頁的樣子,所以,Python網頁爬蟲所擷取到的內容,也就是網頁原始碼,像是以下範例:
<html> <head> <title>Page Title</title> </head> <body> <h1>My Heading</h1> <div class=“post-title-container”> <h3 class="post-title"> <a href=“https://www.learncodewithmike.com”>Learn Code With Mike</a> </h3> <div class=“post-body-container”> <span id=“published”>2020年10月20日</span> <span id=“author”>Mike Ku</span> </div> </div> </body> </html>
從範例中可以看到,網頁是由許多的標籤(Tag)與元素(Elements)組成,並且具有階層式的結構,所以Python網頁爬蟲就需要透過定位,來取得所需的元素(Elements)。
舉例上面的例子來說,一個部落格貼文的標題容器(post-title-container)中,包含了標題元素(post-title)及貼文的資訊容器(post-body-container),而貼文的資訊容器(post-body-container)中又包含了日期(published)及作者(author)元素,可以明顯的看到階層關係,網頁也就是這樣進行排列及定位,所以,如果Python網頁爬蟲要擷取「作者」元素,除了可以利用id屬性來定位外,也可以先定位第12行的貼文資訊容器(post-body-container)後,再定位其中的子節點來取得。
而Python網頁爬蟲取得元素(Elements)後,就可以利用接下來要介紹的套件及框架,爬取其中的資料,也就是去掉元素(Elements)中的HTML標籤(Tag)。
四、常見的套件及框架
Python網頁爬蟲常見的套件及框架包含:
- BeautifulSoup
- Selenium
- Scrapy
BeautifulSoup對於HTML及XML的解析非常友善,並且容易入門使用,適用於靜態類型的網頁及小型的Python網頁爬蟲專案。
Selenium同時擁有網頁自動化測試及爬取功能,能夠搭配 JavaScript來進行爬取,所以非常適用於爬取需要滾動捲軸來動態載入資料的網站,像是電子商務或社群平台等。
Scrapy相較於BeautifulSoup及Selenium爬取速度較快且有效率,擁有非同步的功能,所以適用於爬取大量的資料及大型網頁爬蟲專案。
五、網頁爬蟲開發流程
開發Python網頁爬蟲的流程,首先,會需要知道想要蒐集什麼樣的資料來進行分析或應用,接著,就可以尋找相關的網站,來分析要爬取的網頁原始碼結構,並且觀察是否有規則或模式可循,然後,選擇程式語言及適當的套件,依照分析的網頁結構及規則開發網頁爬蟲,最後,將爬取的資料依需求寫入資料庫、CSV檔案或雲端等,如下範例:
六、小結
以上就是開發Python網頁爬蟲前,需要知道的五個基本的觀念,瞭解網頁爬蟲就是一種網頁機器人,模擬使用者利用網路運作的方式,請求(Request)網頁伺服端(Server),接著,選擇適當的套件或框架,將回應(Response)的網頁原始碼進行解析及爬取,最後依需求存入儲存媒體中,希望能夠幫助讀者對於Python網頁爬蟲有基本的認識。
有想要看的教學內容嗎?歡迎利用以下的Google表單讓我知道,將有機會成為教學文章,分享給大家😊
Python學習資源
Python網頁爬蟲推薦課程
Python網頁爬蟲-BeautifulSoup教學
Python網頁爬蟲-Selenium教學
Python非同步網頁爬蟲
Python網頁爬蟲應用
Python網頁爬蟲部署
Python網頁爬蟲資料儲存
Python網頁爬蟲技巧
留言
張貼留言