移至主內容
首頁
SLAT Blogs

主導覽

  • 首頁
使用者帳號選單
  • 登入

導航連結

  1. 首頁
  2. 部落格
  3. 肥貓的異想世界

試用Python製作一支簡單的爬蟲程式

By 肥貓, 18 九月, 2025
crawl_law_from_MOJ

讀法規考古題,不外乎是要記法條。但是一條一條從全國法規資料庫慢慢複製貼上會很繁瑣。最便捷的方式無非是寫支爬蟲,逐條寫進檔案(本例是csv)。但是請留意,爬蟲請避免用在有著作權或流量限制的網站上以免觸法。在合理使用的前提下,使用政府的開放資料還是比較妥當。

以我國刑法為例,進入全國法規資料庫刑法的網頁後,在條文處按右鍵->檢測,我們要看這html文件的階層分佈。知道他的物件Class為"col-no";

同樣看到內文的物件Class為"law-article"

通常他會以一對一的方式出現,如果能用爬蟲工具拆解物件的結構,爬回家就省事多了。

利用同樣的方法,也可以查到法條名稱是在Class "table"的地方,至於後面a什麼的那個是html語法中比較細節的東西,我就不在這詳述。把這名稱存起來,我就不用手動輸入法條名稱。

因此,我寫了一支程式碼長這樣

#我是分隔線

#第一段

import time
import requests
from bs4 import BeautifulSoup
from urllib.parse import unquote
import pandas as pd
database=pd.DataFrame([],columns=["actname","title","article"]) 

#%%第二段
#urls=[]
url = input('請輸入全國法規資料庫網址:')

web = requests.get(url)
soup = BeautifulSoup(web.text, "html.parser")
filename=soup.find('table').find('a').text


#urls=urls[0:6] 
#start_time=time.time()
#print(start_time)
def crawl_questions(url):
   web = requests.get(url)
   soup = BeautifulSoup(web.text, "html.parser")
   #soup.select('p:contains("第 ")') 
   titles = soup.find_all('div', class_='col-no')      # 取得 class 為 title 的 div 內容
   #print(titles)
   #print(titles.text)
   articles=soup.find_all('div', class_='law-article')    
   
   #titles_output = []
   lawbase=pd.DataFrame([],columns=["actname","title","blank1","blank2","blank3","blank4","blank5","article"])
   #articles_output = []
   for i,j in zip(titles,articles):
       exports=pd.DataFrame([])
       exports["actname"]=[filename]
       exports["title"]=[i.text.replace(" ", "")]
       exports["article"]=j.text.strip()
       lawbase=pd.concat([lawbase,exports])
       #titles_output.append(i.text)
       #articles_output.append(j.text) 
   return lawbase
       
lawbase=crawl_questions(url)
database=pd.concat([lawbase,database])
#database.to_csv("{}.csv".format(filename))
#%%第三段
database.to_csv("{}.csv".format(filename),index=False)

#我是分隔線

之所以寫成3段,是因為如果你想爬好幾部法條的時候,你必須只執行第二段程式碼,才不會把上一次爬的法條蓋掉。其實整條Script不分段執行,只爬一部法條也是OK的。

如果正常執行完,理論上能跑出如圖的結果

然後在您的工作資料夾(work directory)找到這個檔案:

至於要不要留下那麼多空白的Column(欄),端看使用者需求。就請自行在程式第二段裡修改參數。

Blog tags
Python
爬蟲
  • 肥貓的異想世界

部落格列表

管理日誌
LibreOffice 正體中文文件
肥貓的異想世界
軟體自由運動部落格
馬哥的大小事
My Libre World
社會派宅爸

最新文章

試用Python製作一支簡單的爬蟲程式
試用Python製作一支簡單的考試程式
Interview with Sandy Corzeta, Admin of Indonesia's Fediverse Instance 'misskey.id'
簡單處理在Ubuntu終端機啟動Miniconda的問題
在LibreOffice Calc利用Vlookup做精準搜尋
現在就加入 LibreOffice 團隊當全職開發者,處理 RTL/CTL/CJK 等事宜!
[JS 筆記] 可選串連、條件三元、falsy、some與includes
用QGIS + OpenStreetMap + Python 處理線形地理資料
申請墨西哥簽證的經驗談
0805 ITTS 田野筆記:與印尼開源社群的初次接觸
Setting up Mailman3 on Debian 11 (Bullseye)
試解決Zotero安裝後無法使用LibreOffice Integration引用文獻的問題
Powered by Drupal