為什麼要學爬蟲?

解鎖你的網路力-讓你輕鬆徜徉在網路海中,「截」你所需,「取」你所要

Wendy Lai avatar
  • Wendy Lai
  • 1 min read
Photo by Chris Ried on Unsplash

如果想要從網路上取得某個資訊,像是這個月各大書店暢銷書的價格比較,除了開啟好幾個分頁,一本一本比價外,有沒有什麼方式可以一鍵完成呢?
像這樣重複性高,數量眾多,又與網頁相關的問題,就不得不提到「爬蟲」這件事

什麼是爬蟲

簡單來說就是透過程式將網路伺服器回傳給瀏覽器的資料擷取下來,從中取得使用者有興趣的部分 以這個例子來說就是某本書的在某個電商平台上的價錢

要怎麼實作呢?

  1. 安裝Python 和 Python package (以Python3為例)
  • Python 官網下載
  • requests
    • 最常使用到的get這個function
    • 可以從r.text得到我們想要的資訊(針對package的內容以HTTP header為基準做初步的解碼)
    import requests
    r = requests.get('https://www.books.com.tw/')
    r.text
    
  • beautifulsoup
    • 解析HTML結構,將取回的網頁HTML結構,透過其提供的方法(Method),能夠輕鬆的搜尋及擷取網頁上所需的資料
    • HTML結構和網站組成細節可參考網站是怎麼構成的?

  1. 分析網頁架構 (以chrome browser為例)
  • 進入網頁後按右鍵或F12可看在檢查這個選項
  • 點選左上角的按鈕後
  • 找到想要書籍的圖片點下去後
  • 就可以對應到相對的HTML內容
  1. 使用上述安裝的packages

import requests
from bs4 import BeautifulSoup
r = requests.get('https://www.books.com.tw/products/0010984894')
soup = BeautifulSoup(r.content, "html.parser")
price = soup.find("ul",class_="price").find(class_="price01").getText()

將BeautifulSoup得到的資料加以拆解

  • soup.find(‘標籤名稱’, ‘屬性’=‘數值’)
    • 我們要得到的金額是包含在<ul> 這個標籤下class屬性是“price”的這個大框架下
      • 亦可用 ‘attrs’
      soup.find("ul", attrs={"class" : "price"})
      
    • 再進一步往下去定位到“price01”這個class
  • soup.getText()
    • 取得最內層的數值,就是我們想要的資訊

其他常用的Method

  • soup.find_all(‘標籤名稱’)
    • 擷取文檔內所有同標籤的內容
  • tag.get(‘屬性’)
    • 取得標籤中某個屬性的數值

從CSS類別下手

  • soup.select(‘CSS的語法選擇’)

    • 在CSS中, . 代表class這個屬性, #代表id這個屬性, ‘>’ 則意味著繼續往下一層搜尋的意思
    • soup.select_one(), 指的是符合篩選條件的第一個元件
    • 原本的寫法亦可改寫成這樣
    soup.select_one('ul.price > li > strong.price01').getText()
    

To Be Continued …

乍看之下,我們一開始提出的問題好像已經解決了 但我們要怎麼從電商平台的首頁找到暢銷榜? 和要怎麼從暢銷版連結到每個排名的書籍呢?

這就不得不進一步提到selenium 和webdriver 這兩個工具 請繼續看下去

Comment

Wendy Lai

Written by : Wendy Lai

La victoire appartient au plus opiniâtre. À cœur vaillant rien d'impossible.

Recommended for You

Tera Term Learning Note

Tera Term Learning Note

Exploring the beauty of macro which makes repetitive tasks easier than ever.

Kindle 使用心得

Kindle 使用心得

初心者也能快速上手