雖然不知道各位學程式語言的動機是什麼,不過像我個人是因為有天突發奇想,很想要自己抓取股票公開資訊觀測站的股市資訊,所以便開始了自學 Python 的旅程,在這個自學的過程中,發現有著同樣想法的人不在少數,但真正能堅持到最後的人卻也不多,所以如果能自己一路走完這個三十天,甚至是看完我寫完這三十天,萬分感謝之餘,仍是感謝!
最後一天了,用網頁爬蟲來做個結尾吧!
網路上充滿了大量的數據,這些數據可以用於不同的目的,如果要收集這些數據,我們需要知道如何從網站中抓取數據。
網頁爬蟲是從網站中提取和收集數據並將其存儲在本地機器或資料庫中的過程。
這次我們將使用 BeautifulSoup 和 requests 這兩個套件來進行數據抓取。
其中有關 BeautifulSoup 的使用細節,可以先去看看 BeautifulSoup 官方文件,可以更了解下面的程式碼在做什麼。
pip install requests
pip install beautifulsoup4
要從網站中抓取數據,必須對 HTML 標籤和 CSS 選擇器有基本的了解,因為我們會透過 HTML 標籤與 class
屬性或 id
屬性來定位網站中的內容。
首先,我們匯入 requests
和 BeautifulSoup
模組:
import requests
from bs4 import BeautifulSoup
接下來,宣告一個變數來存放要抓取的網站 URL。
import requests
from bs4 import BeautifulSoup
url = 'https://archive.ics.uci.edu/ml/datasets.php'
# 使用 requests 的 get 方法從網站獲取數據
response = requests.get(url)
# 檢查狀態碼
status = response.status_code
print(status) # 200 表示成功獲取數據
執行上述程式後,應該會看到如下輸出:
200
這表示成功獲取了網站數據。
接下來,我們使用 BeautifulSoup 來解析網頁內容:
import requests
from bs4 import BeautifulSoup
url = 'https://archive.ics.uci.edu/ml/datasets.php'
response = requests.get(url)
content = response.content # 獲取網站的全部內容
soup = BeautifulSoup(content, 'html.parser') # 使用 BeautifulSoup 解析 HTML 內容
# 解析網頁標題
print(soup.title) # <title>UCI Machine Learning Repository: Data Sets</title>
print(soup.title.get_text()) # UCI Machine Learning Repository: Data Sets
# 解析網頁 body 標籤內的內容
print(soup.body)
# 確認回應的狀態碼
print(response.status_code)
接著,我們來提取網頁中的表格內容:
import requests
from bs4 import BeautifulSoup
url = 'https://archive.ics.uci.edu/ml/datasets.php'
response = requests.get(url)
content = response.content
soup = BeautifulSoup(content, 'html.parser')
# 查找所有帶有 cellpadding 屬性值為 3 的表格
tables = soup.find_all('table', {'cellpadding': '3'})
# 我們要找的表格被存放在列表中,因此取出列表中的第一個表格
table = tables[0]
# 查找表格中的所有 td 標籤,並打印其中的文本內容
for td in table.find('tr').find_all('td'):
print(td.text)
執行這段代碼後,會發現數據已經成功擷取了一半,也就代表成功地爬到我們部分的想要資料了,接下來就是針對其他所需的內容,繼續一點一點地完成爬蟲。
竟然⋯⋯完賽了!(?)