python的確是個相當好玩、實用的工具!快又有效的特質讓他在程式語言的喜好度迅速攀升。
不管是小酌或大宴兩相宜啊!網路資料的擷取或是所謂的爬蟲也是個有趣且實用的議題,值得開個「抓爬仔」專區(呵~~ ^^|||)來記錄一下學習歷程。
這次呢~~就簡單先以安裝這支著名的Beautiful Soup 4(bs4)模組,並簡單看看如何應用在網路新聞的擷取應用上。
認識更多關於Beautiful Soup 4(bs4)的知識
本次學習目標~~:
一、如何將目標網站(以聯合新聞網(UDN)為例)內容擷取下來。
二、分析擷取的網站內容,分析並條列出我們所需的內容(本次以條析熱門新聞標題及網址為例)。
首先~~由於bs4並非python安裝的標準程式庫,所以必須要先安裝bs4,而後再進行目標網站的擷取、分析與整理、輸出工作,大致上可分成以下步驟進行:
step1.安裝Beautiful Soup 4(bs4):pip install beautifulsoup4
step2.在程式中引入bs4模組: from bs4 import BeautifulSoup
step3.應用requests模組引入並擷取目標網站內容: requests.get('目標網站網址')
step4.整理、解析目標網站擷取之網頁內容:
BeautifulSoup(擷取的網頁內容, 'html.parser')
soup.find_all('查找的html Tag(標籤)')
step5.整理並輸出解析結果
大致上就是這樣啦~~~(但非絕對喔~程式存乎一心啊!)
===========================================================
好~~基本的心得介紹完,直接上這次的練習程式碼:
收先當然你得先知道及預設好你要擷取的網站網址囉~~~以本次練習而言就是
聯合新聞網-熱門新聞:https://udn.com/rank/pv/2
然後就是完整程式碼如下:
import requests
from bs4 import BeautifulSoup
# 下載 udn新聞網「熱門」新聞內容
r = requests.get('https://udn.com/rank/pv/2')
# 確認是否下載成功
if r.status_code == requests.codes.ok:
print('ok') # 後續可刪除或標註為註解
# 以BeautifulSoup解析HTML程式碼
soup = BeautifulSoup(r.text, 'html.parser')
print(soup) # 可先在此列出網站擷取內容進行分析(後續可刪除或標註為註解)
# 以相對應之 HTML Tag 查找相關新聞
stories = soup.find_all('a', class_='story-list__image--holder')
for s in stories: # 以for迴圈進行結果的條列與輸出
if type(s.get('aria-label')) is str: # 若新聞連結標題有文字內容
print("標題:" + s['aria-label']) # ←↓二種擷取資料內容的語法(將'aria-label標籤內容輸出)
print("網址:" + s.get('href')) # 將 href標籤內容輸出
就這樣~~~大概十來行的程式就可以完成了!
程式裡面的幾個關鍵點,可以對應到上述的步驟解析,大家可以自行對應理解,在這裡特別將幾個值得提醒的注意事項列出如下:
1.上列程式碼中的第9.12二行的print(...),主要是作為程式練習及撰寫過程中「檢核」之用,分別是確認目標網站連結、擷取是否正確(第9行)及查看目標網站擷取的HTML內容的解析結果(第12行),以便後續從擷取解析後的網站內容中查找相關內容。
(第9.12這二行~在程式正常運作後,可以刪除或標記為註解(#)以免影響程式最後顯示的成果)
最後,就是使用for迴圈將解析查找到的新聞,一條一條的整理成新聞「標題」及「網址」的方式條列式輸出。
裡面涉及的一些python語法,若是未曾接觸過的可以順便認識、了解一下!(像是for迴圈、字典檔的操作等等),後續有機會也會再整理一些資料供大家參考!
了解基本的使用方法後,最能有成就感的練習方式自然是趕緊再找些你感興趣的網站,練習擷取、解析等工作,實際享受程式運作並呈現成果的樂趣!
後面會同樣再以相同網站練習另外一種解析網頁內容語法的方式,屆時大家再自行比較看看!
沒有留言:
張貼留言