Day14 - 網頁爬蟲?

網頁爬蟲

前言

這一篇基本上我打算輕鬆一點介紹爬蟲就好,所以這一篇的篇幅或許會比以往前面少很多,主要也是讓大腦可以輕鬆一點。

網路爬蟲?

簡單來講,網頁爬蟲(Web Crawler)是一種自動化的程式,可以在網路上搜尋並收集資料,並將資料儲存到本地端或是資料庫中。

網路爬蟲,又稱網路蜘蛛、螞蟻、自動索引器等,所以如果你看到人家說網路蜘蛛,其實也是在講網路爬蟲。

那麼為什麼需要爬蟲呢?因為有時候我們某些頁面並沒有提供 API,但是我們又想要取得資料,這時候就可以透過爬蟲來取得資料。

應該有點難懂吧?那我們來看一個例子,假設我們想要取得 是 Ray 不是 Array 的文章列表,但是由於它沒有提供 API 可以讓我們取得文章列表,這時候我們就可以透過爬蟲來取得文章列表。

那麼實際生活上爬蟲的案例有哪些呢?像是 Google、Yahoo!、Bing 等搜尋引擎,就是透過爬蟲來取得網頁資料,並且建立索引,讓使用者可以透過關鍵字來搜尋網頁。

當然搜尋引擎不是唯一的爬蟲案例,像是網路上的價格比較網站,也是透過爬蟲來取得商品資料,並且建立索引,讓使用者可以透過關鍵字來搜尋商品,這過程也包含了許多知識,例如演算法,我們該如何比對出最熱門的商品,符合使用者關鍵字的商品等等。

因此這邊簡單結論一下爬蟲可以有哪些用途:

  • 搜尋引擎索引
  • 資料分析
  • 價格比較

…等等

但是這邊有件事情要提醒,爬蟲雖然很方便,我們可以透過爬蟲去爬取我們想要的資料,但你也必須注意你爬取的內容是否有授權,如果你的爬蟲是未經授權的方式,例如…

  • 私人資料
  • 版權內容
  • 未公開的資料

…等等

那麼就會有可能要負擔法律責任的風險,這也是人家常常在說的一件事情

「爬蟲爬得好,牢飯吃得飽。」

當然,有些網站會做爬蟲防禦,因為爬蟲會消耗網站的資源,因此你在實作的時候你會發現有些網站是無法爬取的,這時候你就必須要想辦法繞過爬蟲防禦,這也是爬蟲的一個挑戰。

爬蟲的流程

那麼接下來我們就來聊一下爬蟲的流程,爬蟲的流程大致上可以分成三個步驟:

  • 分析來源
  • 取得資料
  • 解析資料
  • 儲存資料

那我們該如何取得資料呢?其實爬蟲的行為跟你平常上網很像…

  • 輸入網址
  • 瀏覽網頁
  • 複製內容

…等等

你會發現爬蟲的行為跟你平常上網的行為非常像,只是我們變成透過程式來執行這些行為,而不是透過人工來執行這些行為。

那麼我們該如何解析資料呢?這時候就要用到 HTML 的知識了,因為我們要透過 HTML 的標籤來解析資料,例如我們要取得文章列表,我們就必須要找到文章列表的標籤,然後透過標籤來取得文章列表的資料。

因此,如果你本身是一名前端工程師的話,我想你應該對 HTML 的標籤不陌生,因為我們在寫網頁的時候,就是透過 HTML 的標籤來建立網頁的結構,而爬蟲也是透過 HTML 的標籤來解析資料。

最後的「儲存資料」就比較簡單了,也就是將爬蟲爬回來並解析完畢的資料轉換成我們想要的格式,例如 JSON、CSV、XML 等等,接著再使用這些資料來做資料分析或是儲存到資料庫中,透過這些資料來做其他的事情。

當然,你也可以用爬蟲來寫出一些股票分析工具,搭配爬蟲來取得股票資料,然後再透過資料分析來分析股票的走勢,這也是爬蟲的一個應用。

所以其實爬蟲這個技巧是滿有趣的,只是你要知道哪些網站可以爬哪些不可爬。

「你這樣講我怎麼知道哪些網站可以爬哪些不可爬?」

爬蟲

基本上你要注意以下幾點:

  • 查看網站條款
    • 有些網站可能會說明不可爬
  • 查看 robots.txt
    • 通常網站會在根目錄放置 robots.txt,裡面會說明哪些網頁可以爬哪些不可爬,如果你不知道什麼是 robots.txt,你可以參考 快速掌握 robots.txt 用途
  • 尊重網站資源
    • 爬蟲其實是會消耗網站資源的,但你也要避免過度增加網站伺服器的負荷。
  • 有私人資料的網站
    • 這邊就不多說了,如果你爬私人資料的網站,那你就是在犯罪。
  • 如果有提供 API 的話,優先使用 API
    • 有些網站會提供 API,如果有提供 API 的話,優先使用 API,這樣可以減少網站伺服器的負荷。

以上幾點大概是你在實作爬蟲時需要注意的事情就是了。

因此爬蟲的概念在於,透過程式來模擬人類的行為,然後取得我們想要的資料,這也是為什麼爬蟲的流程跟你平常上網的行為很像了。

那麼這一篇就先到這邊,下一篇見囉~