什麼是爬蟲?
- 「網路爬蟲」是一個透過程式「自動抓取」網站資料的過程
- 依據所訂規則自動抓取網頁上資訊的程式。
- 整理出我們所需的格式,像是 Excel 試算表、CSV 檔案或是資料庫等。
原理
- 發起請求:通過HTTP庫向目標站點發起請求,即傳送一個Request,請求可以包含額外的headers等資訊,等待伺服器響應。
- 獲取響應內容:如果伺服器能正常響應,會得到一個Response,Response的內容便是所要獲取的頁面內容,型別可能有HTML,Json字串,二進位制資料(如圖片視訊)等型別。
- 解析內容:得到的內容可能是HTML,可以用正規表示式、網頁解析庫進行解析。可能是Json,可以直接轉為Json物件解析,可能是二進位制資料,可以做儲存或者進一步的處理。
- 儲存資料:儲存形式多樣,可以存為文字,也可以儲存至資料庫,或者儲存特定格式的檔案。
request、response
- request
請求方式:主要有GET、POST兩種型別,另外還有HEAD、PUT、DELETE、OPTIONS等。
請求URL:URL全稱統一資源定位符,如一個網頁文件、一張圖片、一個視訊等都可以用URL唯一來確定。
請求頭:包含請求時的頭部資訊,如User-Agent、Host、Cookies等資訊。
請求體:請求時額外攜帶的資料如表單提交時的表單資料。
- response
響應狀態:有多種響應狀態,如200代表成功、301跳轉、404找不到頁面、502伺服器錯誤。
響應頭:如內容型別、內容長度、伺服器資訊、設定Cookie等等。
響應體:最主要的部分,包含了請求資源的內容,如網頁HTML、圖片二進位制資料等
實作
安裝beautifulsoup、requests套件
- pip install beautifulsoup4
- pip install requests
建立.py檔,並載入模組
from bs4 import BeautifulSoup
import requests
向網站發起請求,拿到網頁
response = requests.get(
"https://www.dcard.tw/f")
解析網頁
soup = BeautifulSoup(response.text, "html.parser")
篩選條件
進入要爬的網站按F12進入開發者模式尋找要蒐集的內容ex:標題等..,以Dcard為例
搜尋網站中h2,並且class=tgn9uw-2 bqeEAL的標籤
result = soup.find_all("h2",{"class":"tgn9uw-2 bqeEAL"})
將篩選結果存進陣列,並列印裡面文字
for title in result:
print(title.select_one("span").getText())