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

更新 發佈閱讀 15 分鐘

前言

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

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

後續可能會再慢慢補上使用說明細節,先提供網址如下。

google colab 程式碼分享網址:https://colab.research.google.com/drive/1WikxY2CQui98QzjTCEOQ_scxoLCsEqGm?usp=sharing

github連結:https://github.com/phi330/SearchforStudentHouseholdRegistration.git


使用步驟

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

前導準備(excel):

因為是查詢學生們的戶籍地址所在學區,excel必備的欄位有:
【學生姓名】、【戶籍地址】
考慮後續比對資料方便性,可加入學生【身分證字號】避免同名同姓混淆。
若有其他欄位需求可自行增加欄位標題。

  1. 建立一份空白excel表單,將預備好的資料貼進去。
  2. 將資料進行存檔。
vocus|新世代的創作平台


【注意】
因目標查詢網址的地址輸入格式只需要輸入路名與完整門牌號碼
(ex:市府路1號),不需要縣市行政區等資訊,
所以需要先將原始資料處理後再貼進excel表格內。

此時我們有三個欄位標題:
學生姓名】、
身分證統一編號】、
戶籍地址處理後


程式步驟(colab):

  1. 登入google 帳號,開啟google colab 建立一份新專案。
vocus|新世代的創作平台
vocus|新世代的創作平台
  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後再執行下一段程式。

vocus|新世代的創作平台

執行第二段程式碼時,會跳出上傳檔案的按鈕,
此時將一開始整理好的excel檔案上傳上去,接著等待跑完即可!

因這個程式是到網站上透過程式一個一個讀取紀錄,
所以資料越多花費的時間也越多,要耐心等待哦‍💁‍♀️

vocus|新世代的創作平台

讀取的過程中也會在下方區域顯示目前讀到哪一位即時顯示,可以大概感受一下進度。

檔案完成之後可以在旁邊的資料夾地方看到成功輸出的excel檔名,
快點兩下就可以下載下來看看成品囉。

vocus|新世代的創作平台

補充說明

能看懂程式碼邏輯的的各位可以再自行修改需要顯示的部分,
以上僅供參考,感謝閱覽的各位~~

留言
avatar-img
Woa的沙龍
2會員
2內容數
你可能也想看
Thumbnail
上兩週我們介紹了資料驗證是什麼,要怎麼利用它來製作下拉式選單、驗證使用者是否輸入特定的文字、日期和數字,還有當輸入不符合驗證規則的時候、試算表會怎麼樣提醒使用者的設定方式。那麼,這次我們要來接著介紹怎麼用「自訂公式」來設定資料驗證。
Thumbnail
上兩週我們介紹了資料驗證是什麼,要怎麼利用它來製作下拉式選單、驗證使用者是否輸入特定的文字、日期和數字,還有當輸入不符合驗證規則的時候、試算表會怎麼樣提醒使用者的設定方式。那麼,這次我們要來接著介紹怎麼用「自訂公式」來設定資料驗證。
Thumbnail
無人機測驗報名簡單小教學~各位按步驟一定可以報名成功的!
Thumbnail
無人機測驗報名簡單小教學~各位按步驟一定可以報名成功的!
Thumbnail
分享台北市鑑定系統 如何一次查詢大量身分證資料筆數的有效期限並輸出成excel(使用:google colab建置)
Thumbnail
分享台北市鑑定系統 如何一次查詢大量身分證資料筆數的有效期限並輸出成excel(使用:google colab建置)
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
護照更新網路預約教學,包含預約系統操作教學及現場辦理說明
Thumbnail
護照更新網路預約教學,包含預約系統操作教學及現場辦理說明
Thumbnail
先確定你住的地方再來這邊填 Visit Japan Web 是讓我們提前辦理入境手續所需資訊,以前我們可能是在飛機上先寫一些入境資訊,現在是在網路上先弄好了,再簡單一點講就是「入境審查」、「海關申報」這些提前填好!可使用的機場為「成田國際機場、羽田機場、關西國際機場、中部國際機場、福岡機場、新千歲機
Thumbnail
先確定你住的地方再來這邊填 Visit Japan Web 是讓我們提前辦理入境手續所需資訊,以前我們可能是在飛機上先寫一些入境資訊,現在是在網路上先弄好了,再簡單一點講就是「入境審查」、「海關申報」這些提前填好!可使用的機場為「成田國際機場、羽田機場、關西國際機場、中部國際機場、福岡機場、新千歲機
Thumbnail
或許可能很少人會需要用到, 但工作上一但需要查詢不上不下數量的學生戶籍學區這個可能就能幫上忙, 避免一個一個輸入到天荒地老🤷‍♂️。 本程式使用台北市戶籍學區查詢系統(https://schooldistrict.tp.edu.tw/html/search.jsp)來協助
Thumbnail
或許可能很少人會需要用到, 但工作上一但需要查詢不上不下數量的學生戶籍學區這個可能就能幫上忙, 避免一個一個輸入到天荒地老🤷‍♂️。 本程式使用台北市戶籍學區查詢系統(https://schooldistrict.tp.edu.tw/html/search.jsp)來協助
Thumbnail
本篇文章分享美東的小學申請經驗,提到公立小學學區制,找房app搜尋時可增加學區限制。詳細介紹如何篩選區域、學校,及申請入學文件程序。
Thumbnail
本篇文章分享美東的小學申請經驗,提到公立小學學區制,找房app搜尋時可增加學區限制。詳細介紹如何篩選區域、學校,及申請入學文件程序。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News