python 爬蟲學習記錄

python 程式語言的著名應用中莫過於就是寫網路爬蟲了,以下記錄我一些學習的心得。
首先,要利用 python 寫一隻爬蟲程式,裡面最重要的就是以下兩個 python 套件:

  1. requests
  2. BeautifulSoup

這兩個套件可以說是構成 python 網路爬蟲的基礎,requests 套件用來拜訪要爬資料的網站,並且取得爬資料網頁的整個 html 內容,BeautifulSoup 套件則是更進一步的剖析取回的 html 文檔內容,像是選擇特定幾個 tag 來取回想爬的資料。
以下為簡單的爬蟲範例,目標是爬一個登山資訊網站的資訊紀錄內容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import requests
from user_agent import generate_user_agent
import bs4

def hiking_crawler():
url = 'https://www.keepon.com.tw/forum-1-1.html'
headers = {
'User-Agent': generate_user_agent(device_type="desktop",
os=('mac', 'linux'))
}
response = requests.get(url, headers=headers)
page_content = bs4.BeautifulSoup(response.content, 'lxml')
hyperlink_list = page_content.select('#forum_list .media-body > h4 > a')

for hyperlink in hyperlink_list:
print(hyperlink.contents)

if __name__ == '__main__':
hiking_crawler()

第 8 行的 generate_user_agent 是用來模擬產生 http request header 中 User-Agent 的相關資訊,用來將爬蟲程式假裝成一般的瀏覽器使用者,如果沒有刻意加這個的話,User-Agent 預設就會透露爬蟲程式的資訊了,可能會被一些不想被爬的網站擋掉。第 12、13 行利用 BeautifulSoup 套件來將回應的 html 內容轉成專屬型別物件來進行之後的元素選擇操作,這裡我是用來取得登山資訊網站的超連結元素內容。最後的執行結果如下:

1
2
3
4
5
6
7
8
9
10
11
12
['劍龍稜新闢捷徑路線(避開重汙染區)+劍龍稜及鋸齒稜B段峭壁登架新繩']
['台南部分基石巡禮--大屯寮、山寮、林鳳營(未遇)、上茄苳、平頂山、六甲、頂秀祐與烏子嶺']
['北大武杷宇森出比魯溫泉']
['新北雙溪 蝙蝠山 苕谷瀑布 苕谷坑古道 苕谷坑山/東南峰 梅竹蹊山']
['新北雙溪 探訪古蹟古厝']
['水頭谷山東南峰']
['阿白縱走']
['坑內路森林步道/受天宮/北天宮行程 ']
['佛頂山朝聖寺/拐子湖山行程']
['連續摃龜的菜刀崙山北峰與車閂寮西北峰-大台北基石巡禮篇']
['20170624-27_干卓萬3.0之山豬驚魂']
['20171209-1214_南一三星好刺刺刺刺']

感想就是 BeautifulSoup 套件真是一個好東西。
參考:
https://www.kdnuggets.com/2018/02/web-scraping-tutorial-python.html