程式試做-批次查詢國中小戶籍學區學校(臺北市)

閱讀時間約 15 分鐘

前言

或許可能很少人會需要用到,
但工作上一但需要查詢不上不下數量的學生戶籍學區這個可能就能幫上忙,
避免一個一個輸入到天荒地老🤷‍♂️

本程式使用台北市戶籍學區查詢系統(https://schooldistrict.tp.edu.tw/html/search.jsp)來協助,
寫了個小程式給可能需要的人們參考,
本來寫在python上,
但考量各使用端的環境架設不盡相同,
可能還是放在google colab大家能比較直覺的使用,
以下程式碼叉走可自行修改,
畢竟原本只是給自己當初因為需要而寫出來使用的。
後續可能會再慢慢補上使用說明細節,先提供網址如下。

使用步驟

本程式預計使用到:一份處理好的excel表格,google colab

前導準備(excel):

因為是查詢學生們的戶籍地址所在學區,excel必備的欄位有:
【學生姓名】、【戶籍地址】
考慮後續比對資料方便性,可加入學生【身分證字號】避免同名同姓混淆。
若有其他欄位需求可自行增加欄位標題。
  1. 建立一份空白excel表單,將預備好的資料貼進去。
  2. 將資料進行存檔。


【注意】
因目標查詢網址的地址輸入格式只需要輸入路名與完整門牌號碼
(ex:市府路1號),不需要縣市行政區等資訊,
所以需要先將原始資料處理後再貼進excel表格內。
此時我們有三個欄位標題:
學生姓名】、
身分證統一編號】、
戶籍地址處理後

程式步驟(colab):

  1. 登入google 帳號,開啟google colab 建立一份新專案。
可在雲端硬碟新增
初始介面
  1. 點選上方【+程式碼】,將以下程式碼貼進去
    (這段程式碼是因應更新造成原本driver不支援而修改的部分)
%%shell
sudo apt -y update
sudo apt install -y wget curl unzip
wget http://archive.ubuntu.com/ubuntu/pool/main/libu/libu2f-host/libu2f-udev_1.1.4-1_all.deb
dpkg -i libu2f-udev_1.1.4-1_all.deb
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
dpkg -i google-chrome-stable_current_amd64.deb
CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`
wget -N https://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P /tmp/
unzip -o /tmp/chromedriver_linux64.zip -d /tmp/
chmod +x /tmp/chromedriver
mv /tmp/chromedriver /usr/local/bin/chromedriver
pip install selenium
  1. 新增第二段程式碼區域,再將下方程式碼貼進去
!pip install xlsxwriter
from selenium import webdriver
import openpyxl
import xlsxwriter
import time
from time import sleep
import requests
import pandas as pd
from bs4 import BeautifulSoup
from google.colab import files
from selenium.webdriver.common.keys import Keys
import io
import pandas as pd
from selenium.webdriver.common.by import By
URL = "https://schooldistrict.tp.edu.tw/html/search.jsp" #台北市學區查詢系統的網址
options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument('--disable-dev-shm-usage')
options.add_argument("--no-sandbox")
driver = webdriver.Chrome(
    options=options
)
driver.implicitly_wait(2)
ai = 0
driver.get(URL)
title = driver.title
uploaded = files.upload()# 會在執行區跳出要上傳xlsx檔案的請求
print(title)
#建立一個新的空白EXCEL表
wb = openpyxl.Workbook()            
s1 = wb['Sheet']
#各欄標題名稱
s1.cell(1,1).value = "姓名"
#s1.cell(1,2).value = "身分證字號"    #如果原本的檔案有身分證字號需要紀錄,可把本行最前面#字拿掉
s1.cell(1,3).value = "戶籍學區學校結果1"
s1.cell(1,4).value = "戶籍學區學校結果2"
s1.cell(1,5).value = "戶籍學區學校結果3"
s1.cell(1,6).value = "戶籍學區學校結果4"
def open():
   
    #取得臺北市學區查詢系統網址    
    driver.get('https://schooldistrict.tp.edu.tw/html/search.jsp')
    search_get()
    
    
def search_get():
    address = driver.find_element(By.ID,"roadSearch") 
    
    #把處理好的EXCEL讀取進來,取得表所在的工作表名稱,還有預計讀取的excel表內各欄標題列名稱
    sheet0 = pd.read_excel(io="輸入讀進來的excel檔名.xlsx", sheet_name="工作表名稱", usecols=["學生姓名","身分證統一編號","戶籍地址處理後"])
    st0 = pd.DataFrame(sheet0)
    
    st1 = st0[["學生姓名"]]
    #st2 = st0[["身分證統一編號"]] #如果有需要紀錄身分證字號,可把本行最前面#字拿掉
    st3 = st0[["戶籍地址處理後"]]
    a1 = 0
    
    for a1 in range(len(st1)):
      
        list1 = st0.at[a1,"學生姓名"]
        #list2 = st0.at[a1,"身分證統一編號"] #如果有需要紀錄身分證字號,可把本行最前面#字拿掉
        list3 = st0.at[a1,"戶籍地址處理後"]
        
        result_get = ""
        result_get1 = ""
        result_get2 = ""
        result_get3 = ""
        
        address.send_keys(Keys.CONTROL+'a')
        address.send_keys(Keys.BACK_SPACE)#每次搜尋前要把輸入欄位先清空
        time.sleep(1)
        address.send_keys(list3)#把EXCEL的戶籍地址那欄透過迴圈所在一個一個讀進去
        identify = driver.find_element(By.ID,"roadButton")
        identify.click()
        time.sleep(1)
        #TRY&EXCEPT語法,當TRY所執行的部分有ERROR,就可以直接執行EXCEPT的部分
        try:
             result_get = driver.find_element(By.XPATH,"//*[@class='ui-datatable-data ui-widget-content']/tr[1]/td[1]").text#找出第一間學校
             try:
                 result_get1 =driver.find_element(By.XPATH,"//*[@class='ui-datatable-data ui-widget-content']/tr[2]/td[1]").text                 
             except:
                 result_get1 = ""#找出第二間學校,如果沒有第二欄,就自動把RESULT_GET1的值設為空,下方步驟同此
                 
             try:
                 result_get2 =driver.find_element(By.XPATH,"//*[@class='ui-datatable-data ui-widget-content']/tr[3]/td[1]").text                 
             except:
                 result_get2 = ""#找出第三間學校
                
             try:
                 result_get3 =driver.find_element(By.XPATH,"//*[@class='ui-datatable-data ui-widget-content']/tr[4]/td[1]").text                 
             except:
                 result_get3 = ""#找出第四間學校
                            
             print(list1,result_get,result_get1,result_get2,result_get3)#在執行區試印出來核對,不用等到整個EXCEL跑完才知道內容是否有誤
             
             s1.cell(int(a1)+2,1).value = list1#姓名
             s1.cell(int(a1)+2,3).value = result_get#第一列的學區學校
             s1.cell(int(a1)+2,4).value = result_get1#第二列的學區學校
             s1.cell(int(a1)+2,5).value = result_get2#第三列的學區學校
             s1.cell(int(a1)+2,6).value = result_get3#第四列的學區學校
 
        except:
             s1.cell(int(a1)+2,1).value = list1#如果出錯了,就在C欄直接打XXXXX
             s1.cell(int(a1)+2,3).value = "XXXXX"
             print(list1,'XXXXX')
                  
        a1+=1
open()
wb.save('改成要輸出來的excel檔名.xlsx')#可把''內改成預計寫入的excel檔名
driver.close()
其中這段程式需要再各自修改的地方有:
檔案讀入名稱、工作表名稱、輸出的檔名,記得依實際狀況進行修改。

執行階段

依次點選程式碼區域旁的執行按鈕,
讀取過程視情況需要等待,
也會跳出需要允許雲端硬碟的存取權限,允許即可。
等到播放鍵變成綠色勾勾就代表這段程式碼執行完成,ok後再執行下一段程式。
執行第二段程式碼時,會跳出上傳檔案的按鈕,
此時將一開始整理好的excel檔案上傳上去,接著等待跑完即可!
因這個程式是到網站上透過程式一個一個讀取紀錄,
所以資料越多花費的時間也越多,要耐心等待哦‍💁‍♀️
讀取的過程中也會在下方區域顯示目前讀到哪一位即時顯示,可以大概感受一下進度。
檔案完成之後可以在旁邊的資料夾地方看到成功輸出的excel檔名,
快點兩下就可以下載下來看看成品囉。

補充說明

能看懂程式碼邏輯的的各位可以再自行修改需要顯示的部分,
以上僅供參考,感謝閱覽的各位~~
avatar-img
2會員
2內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Woa的沙龍 的其他內容
分享台北市鑑定系統 如何一次查詢大量身分證資料筆數的有效期限並輸出成excel(使用:google colab建置)
分享台北市鑑定系統 如何一次查詢大量身分證資料筆數的有效期限並輸出成excel(使用:google colab建置)
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
松江市位於山陰地區的中心,是個水鄉,擁有宍道湖、中海、堀川等多種水域,市區由厚達20公尺的沖積層形成,與市區接壤的北部和南部地區是海拔50公尺以下的丘陵山地,湖北地區,丘陵山脈向北過渡為陡峭山脈,穿過分水嶺後坡度轉變為日本海一側,在湖南甲南地區的丘陵山區,大森累層的輝石安山岩經常覆蓋花崗岩;距離廣島
Thumbnail
文學創作和寫程式之間,似乎是兩件充滿衝突的事情,有時候我會有點難以解釋發生在自己身上的這種二元特性。以前國高中學習的時候,學科被分割成國英數社自五個項目,其實我最喜歡的科目是國文和數學,在高中要分類組的時候,因為感覺自己除了國文數學之外,還喜歡歷史,所以選了一類組。但是,如今回首從高中選組之後到現在
Thumbnail
河內長野市位於大阪府東南端,東隔金剛山脈與奈良縣接壤,南隔泉山脈與和歌山縣接壤,形成北頂點為三角形的城區,面積109.63平方公里,70%的面積為森林,主要市區位於北部的平原,屬於近畿平原的一部分,石川及石見川自南部山區向北流入平原區域,市區大部分地區為砂岩,土壤肥沃,加上濕潤溫暖的內陸氣候,適合種
Thumbnail
有時候,最簡單的事情可以做很多事! 如果你點擊活動廣告,你會注意到網址尾端會有一些額外的“代碼”。 類似:“?utm_source=XXXXX” 「XXXXX」是對放置連結的位置的描述,以便活動商追蹤來源。 但這僅用於追蹤數據。 下次當你要分享其他人的網站或內容時,使用相同的“程式碼”看看
Thumbnail
到底該成為自己,還是走上父母期待的樣子? 你有這樣的掙扎嗎?還是你的父母都很支持你呢? 這篇我們來聊聊與原生家庭的關係,身為子女的我們該如何看待父母的期待?
Thumbnail
不知道你們說到山東最先想到哪座城市?是青島?煙台?還是省會濟南呢?
Thumbnail
01.《策展詩學:教育、諸眾與民主之後》 02.《台灣當代藝術策展二十年》 03.《策展簡史》 04.《臂距之外:行政法人博物館的觀察》 05.《博物館/美術館的未來性:行政法人制度研究》 06.《樓外青山:文化.休閒.類博物館》 07.《邁向繆思:漢寶德談博物館》
Thumbnail
​ ​​ ​​ 城市中總有許多曾經滄海難為田地城市繁華與落寞,對於和小編同屬斯長在基隆人來說;現今藏身於基隆市仁愛區水錦里仁二路惠隆大樓的傳統市場,曾經是那麼地人聲鼎沸,買菜是要喊:“厝邊救軌”的熱鬧市集。當初田寮河的滄海桑(填)田(地)造就了惠隆大樓的興建,過往繁華一時的景象;對現在的我們難以
Thumbnail
歌名:在這座城市遺失了你  演唱:告五人, Accusefive  作詞:潘雲安  作曲:潘雲安 三番故里 窗外雨滴打破細碎的玻璃  與你相遇 是在一個單純美好的世界  而在變質那天 你淚流誇張情節 足以 向全世界討回 你付出的一切 妳的故事 存在一個需要密碼的盒子  紀念時刻 打開卻會冒出一陣
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
松江市位於山陰地區的中心,是個水鄉,擁有宍道湖、中海、堀川等多種水域,市區由厚達20公尺的沖積層形成,與市區接壤的北部和南部地區是海拔50公尺以下的丘陵山地,湖北地區,丘陵山脈向北過渡為陡峭山脈,穿過分水嶺後坡度轉變為日本海一側,在湖南甲南地區的丘陵山區,大森累層的輝石安山岩經常覆蓋花崗岩;距離廣島
Thumbnail
文學創作和寫程式之間,似乎是兩件充滿衝突的事情,有時候我會有點難以解釋發生在自己身上的這種二元特性。以前國高中學習的時候,學科被分割成國英數社自五個項目,其實我最喜歡的科目是國文和數學,在高中要分類組的時候,因為感覺自己除了國文數學之外,還喜歡歷史,所以選了一類組。但是,如今回首從高中選組之後到現在
Thumbnail
河內長野市位於大阪府東南端,東隔金剛山脈與奈良縣接壤,南隔泉山脈與和歌山縣接壤,形成北頂點為三角形的城區,面積109.63平方公里,70%的面積為森林,主要市區位於北部的平原,屬於近畿平原的一部分,石川及石見川自南部山區向北流入平原區域,市區大部分地區為砂岩,土壤肥沃,加上濕潤溫暖的內陸氣候,適合種
Thumbnail
有時候,最簡單的事情可以做很多事! 如果你點擊活動廣告,你會注意到網址尾端會有一些額外的“代碼”。 類似:“?utm_source=XXXXX” 「XXXXX」是對放置連結的位置的描述,以便活動商追蹤來源。 但這僅用於追蹤數據。 下次當你要分享其他人的網站或內容時,使用相同的“程式碼”看看
Thumbnail
到底該成為自己,還是走上父母期待的樣子? 你有這樣的掙扎嗎?還是你的父母都很支持你呢? 這篇我們來聊聊與原生家庭的關係,身為子女的我們該如何看待父母的期待?
Thumbnail
不知道你們說到山東最先想到哪座城市?是青島?煙台?還是省會濟南呢?
Thumbnail
01.《策展詩學:教育、諸眾與民主之後》 02.《台灣當代藝術策展二十年》 03.《策展簡史》 04.《臂距之外:行政法人博物館的觀察》 05.《博物館/美術館的未來性:行政法人制度研究》 06.《樓外青山:文化.休閒.類博物館》 07.《邁向繆思:漢寶德談博物館》
Thumbnail
​ ​​ ​​ 城市中總有許多曾經滄海難為田地城市繁華與落寞,對於和小編同屬斯長在基隆人來說;現今藏身於基隆市仁愛區水錦里仁二路惠隆大樓的傳統市場,曾經是那麼地人聲鼎沸,買菜是要喊:“厝邊救軌”的熱鬧市集。當初田寮河的滄海桑(填)田(地)造就了惠隆大樓的興建,過往繁華一時的景象;對現在的我們難以
Thumbnail
歌名:在這座城市遺失了你  演唱:告五人, Accusefive  作詞:潘雲安  作曲:潘雲安 三番故里 窗外雨滴打破細碎的玻璃  與你相遇 是在一個單純美好的世界  而在變質那天 你淚流誇張情節 足以 向全世界討回 你付出的一切 妳的故事 存在一個需要密碼的盒子  紀念時刻 打開卻會冒出一陣