網路爬蟲學習分享
前言
在這個資訊爆炸的時代中,網路上的資料成為現代人的資訊來源,因此網路上的資料收集可以說是現代人必備技能之一,但是透過人工的方式來收集大量的網路資料,效率不高之外還會花費過多的時間,這個時候如果有一個方便的工具可以替代人工的方式,想必會變得非常輕鬆,因此資料的收集與整理,可以透過網路爬蟲來協助,可以自行制定好程式腳本的規則,網路爬蟲就可以自動依照規則收集和存取資料。
這篇文章主要會分享透過 Python 程式語言,進行網路資料存取的基本程式撰寫, 希望對於不熟悉或是沒寫過的朋友們有所幫助。
網路爬蟲的介紹
網路爬蟲(web crawler),也稱網路蜘蛛(spider),是使用腳本來自動瀏覽網站資訊的技術。
最成功的應用無非就是網路搜尋引擎,像是 Google、Yahoo、Bing,它們透過網路爬蟲在網際網路中收集各式各樣的網站與內容,當用戶在搜尋引擎上搜尋關鍵字時,就能夠找出相關的網站資訊。
網路爬蟲的存取過程會消耗目標網站的系統資源。不少網路系統並不默許網路爬蟲,因此在存取大量頁面時,網路爬蟲需要考慮到規劃與負載。不願意被網路爬蟲存取的公開網站可以使用 robots.txt 檔案來要求網路爬蟲只對網站的一部分進行索引,或完全不作處理。
開發實作環境
- Python 3.9.2
https://www.python.org/downloads/release/python-392/ - pip 20.2.3
為 Python 內建的套件管理。 - Python Requests 套件
可對網路發起 HTTP 協定的各式請求,像是 get、post、delete 等。 - Python Beautifulsoup4 套件
藉由網頁的結構特性來解析網頁,可透過指令提取 HTML 標籤裡的元素。 - Python lxml 套件
用於解析 XML 和 HTML 文件資料的工具,並且可將數據轉換為 Python 數據類型。
開發實作方式
第一步:收集網路爬蟲相關資料
在存取所需要的內容前,需要先了解 HTML 的結構,以及要存取的資料是在哪個 element 中,可以透過 F12 的方式開啟 Chrome 的開發者工具,藉由網頁的 HTML 原始碼查找所要的資料 element,也可以在想要存取的資料上按 右鍵 → 檢查,或是透過 command/control + shift + c 查找。
可以看到 class 為 infoArea
的 section
標籤(白色框) 裡包含了一部電影資訊,電影名稱(紅色框)、英文名稱(橘色框)、上映日期(黃色框),取得所需的資料 element 後,就可以開始撰寫網路爬蟲的程式腳本來抓取資料了。
第二步:撰寫網路爬蟲程式腳本
import requests from bs4 import BeautifulSoup response = requests.get('https://www.vscinemas.com.tw/vsweb/film/coming.aspx?p=1') soup = BeautifulSoup(response.text, 'lxml')
首先先透過 import
來匯入 requests 與 BeautifulSoup 套件。
接者使用 requests.get
方法,發出我們要進行網路爬蟲的網站 url 請求,來取得即將上映的網頁資料。
成功得到回覆後,在 response.text
中可以取得 HTML 網頁內容,在建立 BeautifulSoup 物件,使用 lxml 的解析方法,接著就可以解析網頁的內容並擷取所需的資料了。
info_items = soup.find_all('section', 'infoArea') for item in info_items: zh_name = item.h2.text.strip() en_name = item.h3.text.strip() time = item.time.text.strip() print('{}({}),上映日:{}'.format(zh_name, en_name, time))
透過 soup.find_all
找出在網頁中所有 class 為 infoArea
的 section 標籤,來取得每一部電影資料,它會回傳一個 list,所以需要透過 for 迴圈來 find 各別取出每一部電影中的以下三個資訊,並使用 print 來印出結果。
- 電影名稱(zh_name):
h2 的標籤,透過 text 取得字串後在使用strip()
刪除多餘的空白。 - 英文名稱(en_name):
h3 的標籤,透過 text 取得字串後在使用strip()
刪除多餘的空白。 - 上映日期(time):
time 的標籤,透過 text 取得字串後在使用strip()
刪除多餘的空白。
第三步:執行程式腳本驗證結果
完成後執行該網路爬蟲程式腳本,即可看到如下的執行結果。
完成後的網路爬蟲程式腳本會像下面這樣。
import requests from bs4 import BeautifulSoup response = requests.get('https://www.vscinemas.com.tw/vsweb/film/coming.aspx?p=1') soup = BeautifulSoup(response.text, 'lxml') info_items = soup.find_all('section', 'infoArea') for item in info_items: zh_name = item.h2.text.strip() en_name = item.h3.text.strip() time = item.time.text.strip() print('{}({}),上映日:{}'.format(zh_name, en_name, time))
結尾
以上是藉由 威秀影城即將上映 的資料來進行基礎的網路爬蟲實作範例,也一同附上了網路爬蟲的程式腳本,如果覺得這篇文章寫得還不錯或是對你有幫助的話,希望可以不吝嗇的給小弟五個鼓掌。
如果還有其他問題,或是有其他想要了解的技術主題,也可以直接留言喔~
參考文獻
相關網站
相關文章