非結構化數據與結構化數據提取---- BeautifulSoup4 解析器

CSS 選擇器:BeautifulSoup4

和 lxml 一樣,Beautiful Soup 也是一個HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 數據。

lxml 只會局部遍歷,而Beautiful Soup 是基于HTML DOM的,會載入整個文檔,解析整個DOM樹,因此時間和內存開銷都會大很多,所以性能要低于lxml。

BeautifulSoup 用來解析 HTML 比較簡單,API非常人性化,支持CSS選擇器、Python標準庫中的HTML解析器,也支持 lxml 的 XML解析器。

Beautiful Soup 3 目前已經停止開發,推薦現在的項目使用Beautiful Soup 4。使用 pip 安裝即可:pip install beautifulsoup4

官方文檔:http://beautifulsoup.readthedocs.io/zh_CN/v4.4.0

抓取工具速度使用難度安裝難度
正則最快困難無(內置)
BeautifulSoup最簡單簡單
lxml簡單一般

示例:

首先必須要導入 bs4 庫

# beautifulsoup4_test.pyfrom bs4 import BeautifulSouphtml = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""#創建 Beautiful Soup 對象 soup = BeautifulSoup(html) #打開本地 HTML 文件的方式來創建對象 #soup = BeautifulSoup(open('index.html')) #格式化輸出 soup 對象的內容 print soup.prettify() 

運行結果:

<html><head><title>The Dormouse's story</title></head><body><p class="title" name="dromouse"><b>The Dormouse's story</b></p><p class="story">Once upon a time there were three little sisters; and their names were<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>,<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>and<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p><p class="story">...</p></body>
</html>
  • 如果我們在 IPython2 下執行,會看到這樣一段警告:?

    ?

  • 意思是,如果我們沒有顯式地指定解析器,所以默認使用這個系統的最佳可用HTML解析器(“lxml”)。如果你在另一個系統中運行這段代碼,或者在不同的虛擬環境中,使用不同的解析器造成行為不同。

  • 但是我們可以通過soup = BeautifulSoup(html,“lxml”)方式指定lxml解析器。

四大對象種類

Beautiful Soup將復雜HTML文檔轉換成一個復雜的樹形結構,每個節點都是Python對象,所有對象可以歸納為4種:

  • Tag
  • NavigableString
  • BeautifulSoup
  • Comment

1. Tag

Tag 通俗點講就是 HTML 中的一個個標簽,例如:

<head><title>The Dormouse's story</title></head> <a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a> <p class="title" name="dromouse"><b>The Dormouse's story</b></p> 

上面的?title?head?a?p等等 HTML 標簽加上里面包括的內容就是 Tag,那么試著使用 Beautiful Soup 來獲取 Tags:

from bs4 import BeautifulSouphtml = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""#創建 Beautiful Soup 對象
soup = BeautifulSoup(html)print soup.title # <title>The Dormouse's story</title> print soup.head # <head><title>The Dormouse's story</title></head> print soup.a # <a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a> print soup.p # <p class="title" name="dromouse"><b>The Dormouse's story</b></p> print type(soup.p) # <class 'bs4.element.Tag'> 

我們可以利用 soup 加標簽名輕松地獲取這些標簽的內容,這些對象的類型是bs4.element.Tag。但是注意,它查找的是在所有內容中的第一個符合要求的標簽。如果要查詢所有的標簽,后面會進行介紹。

對于 Tag,它有兩個重要的屬性,是 name 和 attrs
print soup.name
# [document] #soup 對象本身比較特殊,它的 name 即為 [document]print soup.head.name
# head #對于其他內部標簽,輸出的值便為標簽本身的名稱print soup.p.attrs # {'class': ['title'], 'name': 'dromouse'} # 在這里,我們把 p 標簽的所有屬性打印輸出了出來,得到的類型是一個字典。 print soup.p['class'] # soup.p.get('class') # ['title'] #還可以利用get方法,傳入屬性的名稱,二者是等價的 soup.p['class'] = "newClass" print soup.p # 可以對這些屬性和內容等等進行修改 # <p class="newClass" name="dromouse"><b>The Dormouse's story</b></p> del soup.p['class'] # 還可以對這個屬性進行刪除 print soup.p # <p name="dromouse"><b>The Dormouse's story</b></p> 

2. NavigableString

既然我們已經得到了標簽的內容,那么問題來了,我們要想獲取標簽內部的文字怎么辦呢?很簡單,用 .string 即可,例如

print soup.p.string
# The Dormouse's storyprint type(soup.p.string)
# In [13]: <class 'bs4.element.NavigableString'>

3. BeautifulSoup

BeautifulSoup 對象表示的是一個文檔的內容。大部分時候,可以把它當作 Tag 對象,是一個特殊的 Tag,我們可以分別獲取它的類型,名稱,以及屬性來感受一下

print type(soup.name)
# <type 'unicode'>print soup.name 
# [document]print soup.attrs # 文檔本身的屬性為空 # {} 

4. Comment

Comment 對象是一個特殊類型的 NavigableString 對象,其輸出的內容不包括注釋符號。

print soup.a
# <a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>print soup.a.string
# Elsie print type(soup.a.string) # <class 'bs4.element.Comment'> 

a 標簽里的內容實際上是注釋,但是如果我們利用 .string 來輸出它的內容時,注釋符號已經去掉了。

遍歷文檔樹

1. 直接子節點 :.contents?.children?屬性

.content

tag 的 .content 屬性可以將tag的子節點以列表的方式輸出

print soup.head.contents 
#[<title>The Dormouse's story</title>]

輸出方式為列表,我們可以用列表索引來獲取它的某一個元素

print soup.head.contents[0]
#<title>The Dormouse's story</title>

.children

它返回的不是一個 list,不過我們可以通過遍歷獲取所有子節點。

我們打印輸出 .children 看一下,可以發現它是一個 list 生成器對象

print soup.head.children
#<listiterator object at 0x7f71457f5710>for child in  soup.body.children:print child 

結果:

<p class="title" name="dromouse"><b>The Dormouse's story</b></p> <p class="story">Once upon a time there were three little sisters; and their names were <a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>; and they lived at the bottom of a well.</p> <p class="story">...</p> 

2. 所有子孫節點:?.descendants?屬性

.contents 和 .children 屬性僅包含tag的直接子節點,.descendants 屬性可以對所有tag的子孫節點進行遞歸循環,和 children類似,我們也需要遍歷獲取其中的內容。

for child in soup.descendants:print child

運行結果:

<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>,
<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and
<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
</body></html>
<head><title>The Dormouse's story</title></head>
<title>The Dormouse's story</title>
The Dormouse's story<body>
<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>,
<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and
<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
</body><p class="title" name="dromouse"><b>The Dormouse's story</b></p>
<b>The Dormouse's story</b>
The Dormouse's story<p class="story">Once upon a time there were three little sisters; and their names were
<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>,
<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and
<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
Once upon a time there were three little sisters; and their names were<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>Elsie 
,<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>
Lacieand<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>
Tillie
;
and they lived at the bottom of a well.<p class="story">...</p>
...

3. 節點內容:?.string?屬性

如果tag只有一個 NavigableString 類型子節點,那么這個tag可以使用 .string 得到子節點。如果一個tag僅有一個子節點,那么這個tag也可以使用 .string 方法,輸出結果與當前唯一子節點的 .string 結果相同。

通俗點說就是:如果一個標簽里面沒有標簽了,那么 .string 就會返回標簽里面的內容。如果標簽里面只有唯一的一個標簽了,那么 .string 也會返回最里面的內容。例如:

print soup.head.string
#The Dormouse's story
print soup.title.string
#The Dormouse's story

搜索文檔樹

1.find_all(name, attrs, recursive, text, **kwargs)

1)name 參數

name 參數可以查找所有名字為 name 的tag,字符串對象會被自動忽略掉

A.傳字符串

最簡單的過濾器是字符串.在搜索方法中傳入一個字符串參數,Beautiful Soup會查找與字符串完整匹配的內容,下面的例子用于查找文檔中所有的<b>標簽:

soup.find_all('b')
# [<b>The Dormouse's story</b>]print soup.find_all('a')
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>] 
B.傳正則表達式

如果傳入正則表達式作為參數,Beautiful Soup會通過正則表達式的 match() 來匹配內容.下面例子中找出所有以b開頭的標簽,這表示<body><b>標簽都應該被找到

import re
for tag in soup.find_all(re.compile("^b")):print(tag.name)
# body # b 
C.傳列表

如果傳入列表參數,Beautiful Soup會將與列表中任一元素匹配的內容返回.下面代碼找到文檔中所有<a>標簽和<b>標簽:

soup.find_all(["a", "b"])
# [<b>The Dormouse's story</b>,
#  <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
# <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, # <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>] 

2)keyword 參數

soup.find_all(id='link2')
# [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]

3)text 參數

通過 text 參數可以搜搜文檔中的字符串內容,與 name 參數的可選值一樣, text 參數接受 字符串 , 正則表達式 , 列表

soup.find_all(text="Elsie")
# [u'Elsie']soup.find_all(text=["Tillie", "Elsie", "Lacie"]) # [u'Elsie', u'Lacie', u'Tillie'] soup.find_all(text=re.compile("Dormouse")) [u"The Dormouse's story", u"The Dormouse's story"] 

CSS選擇器

這就是另一種與 find_all 方法有異曲同工之妙的查找方法.

  • 寫 CSS 時,標簽名不加任何修飾,類名前加.,id名前加#

  • 在這里我們也可以利用類似的方法來篩選元素,用到的方法是?soup.select(),返回類型是?list

(1)通過標簽名查找

print soup.select('title') 
#[<title>The Dormouse's story</title>]print soup.select('a') #[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>] print soup.select('b') #[<b>The Dormouse's story</b>] 

(2)通過類名查找

print soup.select('.sister')
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

(3)通過 id 名查找

print soup.select('#link1')
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>]

(4)組合查找

組合查找即和寫 class 文件時,標簽名與類名、id名進行的組合原理是一樣的,例如查找 p 標簽中,id 等于 link1的內容,二者需要用空格分開

print soup.select('p #link1')
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>]

直接子標簽查找,則使用?>?分隔

print soup.select("head > title")
#[<title>The Dormouse's story</title>]

(5)屬性查找

查找時還可以加入屬性元素,屬性需要用中括號括起來,注意屬性和標簽屬于同一節點,所以中間不能加空格,否則會無法匹配到。

print soup.select('a[class="sister"]')
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]print soup.select('a[href="http://example.com/elsie"]') #[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>] 

同樣,屬性仍然可以與上述查找方式組合,不在同一節點的空格隔開,同一節點的不加空格

print soup.select('p a[href="http://example.com/elsie"]')
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>]

(6) 獲取內容

以上的 select 方法返回的結果都是列表形式,可以遍歷形式輸出,然后用 get_text() 方法來獲取它的內容。

soup = BeautifulSoup(html, 'lxml')
print type(soup.select('title'))
print soup.select('title')[0].get_text() for title in soup.select('title'): print title.get_text()

轉載于:https://www.cnblogs.com/joshuazc/p/9790774.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537702.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537702.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537702.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機的網絡技術的普及,計算機網絡技術的普及與應用-網絡技術論文-計算機論文(7頁)-原創力文檔...

計算機網絡技術的普及與應用摘要&#xff1a;隨著通信和計算機技術緊密結合與同步發展&#xff0c;我國計算機網絡技術得到飛躍的發展。如今在社會生活的各個領域都可以尋覓到計算機網絡技術的蹤跡&#xff0c;它成為社會發展中必不可少的一門技術。為進一步促進計算機網絡技術…

pyaudio usb playback_5.5寸觸控屏IP電話會議USB全向麥克風NK-OAM600U_影視工業網

寸觸控屏視頻會議USB全向麥克風(拾音器)NK-OAM600U概述&#xff1a;派尼珂NK-OAM600U視頻會議USB全向麥克風&#xff0c;是一款配置多點手勢觸控FHD屏的高清會議電話&#xff0c;便捷的連接方式&#xff1a;支持USB/以太網/WIFI/藍牙Bluetooth連接&#xff0c;同時支持外接視頻…

寫sql語句的經驗之談

1. 不論一個sql中涉及到多少表&#xff0c;每次都用兩個表&#xff08;結果集&#xff09;操作&#xff0c;得到新的結果后&#xff0c;再和下一個表&#xff08;結果集&#xff09;操作。 2. 避免在select f1,(select f2 from tableB ).... from tableA 這樣得到字段列。直接…

微軟發布Azure Storage不可變存儲功能的正式版本

隨著新的不可變存儲功能的發布&#xff0c;blob特性在特定的保留期間內將是不可以擦除和修改的。該特性從今年6月份開始進行預覽使用&#xff0c;現在&#xff0c;微軟宣布它在所有公開Azure region中正式發布。\\微軟添加對不可變存儲的支持&#xff0c;以便于幫助客戶遵循像S…

html 表單控制器,c# – html表單發布到mvc控制器

將Html發布到MVC控制器>使用表單創建HTML頁面(不要忘記引用Jquery.js)User Name Password $(document).ready(function () {//get button by ID$(#btn1).submit(function () {//call a function with parameters$.ajax({url: rec/recieveData, //(rec) Controllers-name//(r…

紅米note5手機插u盤沒反應_認真分析下:榮耀智慧屏x1和紅米x50對比哪個好?用后一個月告訴大家實情...

這二款電視榮耀智慧屏x1和紅米x50區別還是有的哈&#xff0c;外觀和款式是不一樣的&#xff0c;不過家用都是可以的&#xff0c;看個人吧&#xff0c;我自己用的是榮耀智慧屏x1&#xff0c;款式是我喜歡的&#xff0c;多時尚的&#xff0c;整體質感不錯的&#xff0c;看上去很大…

用Excel函數提高效率

今天在計劃20某年項目采購各階段時間點&#xff0c;從合同計劃簽訂日期開始倒退。 規則如下&#xff1a; 項目采購申請----&#xff08;1-2個工作日&#xff09;---->項目立項----&#xff08;1-2個工作日&#xff09;--->采購小組成立-----&#xff08;2-3個工作日&am…

python測試工具開發面試寶典3web抓取

2019獨角獸企業重金招聘Python工程師標準>>> 用requests輸出網站返回頭 輸出 https://china-testing.github.io/ 的返回頭 參考答案In [1]: import requestsIn [2]: url https://china-testing.github.io/In [3]: response requests.get(url)In [4]: response.req…

計算機網絡本直通線的制作方法,電腦網絡:教你一分鐘自制高質量網線(含水晶頭分類),不求人...

在文章開頭&#xff0c;我們首先來介紹一下制作水晶頭需要用到的工具——網線鉗。這不是多么高科技的東西&#xff0c;價格也不貴&#xff0c;普通用戶都能接受&#xff0c;從網上或是線下都能買到。網線水晶頭的制作及檢測方法&#xff0c;從來沒人寫過這么全我們主要用到網線…

Communications link failure,The last packet successfully received from the serve

最近做測試&#xff0c;發現Mysql 過一段時間會無法連接&#xff0c;導致數據庫數據不一至&#xff0c;極其郁悶。 使用Connector/J連接MySQL數據庫&#xff0c;程序運行較長時間后就會報以下錯誤&#xff1a; Communications link failure&#xff0c;The last packet succ…

sap crm button_正值SAP中國成立25周年之際,江蘇金來奇智能科技SAPB1項目正式啟動...

正值SAP中國成立25周年之際&#xff0c;江蘇金來奇智能科技的SAP項目于2020年11月02日正式啟動&#xff0c;代表著SAPB1在智能裝備行業又一成功的案例。江蘇金來奇隸屬于無錫金鑫集團股份有限公司&#xff0c;無錫金鑫集團股份有限公司坐落于風景秀麗的太湖之濱&#xff0c;位于…

安裝hadoop集群---resourcemanager和NameNode不在同一臺機器上

1、復制虛擬機&#xff0c;搞了5臺。 1&#xff1a;namenode 2&#xff1a;secondardNameNode&#xff0c;resourcemanager 3&#xff0c;4&#xff0c;5&#xff1a;DataNode 2、修改了網卡配置&#xff0c;連接上SecureCRT ---------root----用戶---------- 3、date查看了…

cf375D. Tree and Queries(莫隊)

題意 題目鏈接 給出一棵 n 個結點的樹&#xff0c;每個結點有一個顏色 c i 。 詢問 q 次&#xff0c;每次詢問以 v 結點為根的子樹中&#xff0c;出現次數 ≥k 的顏色有多少種。樹的根節點是1。 Sol 想到了主席樹和啟發式合并。。很顯然都不能做。 標算是dfs序上暴力莫隊。。甘…

it項目管理 pdf_IT項目管理的控制經驗

據調查&#xff0c;只有37%的IT項目在計劃時間內完成&#xff0c;42%的在預算內完成。IT項目成功率不高的根源在于IT項目管理是項系統工程&#xff0c;不僅需要項目經理個人具備一定的組織、決策、技術、業務、溝通能力&#xff0c;更需要運用多種手段對項目的時間、質量、成本…

安裝hadoop集群---resourcemanager和NameNode同一臺機器上

1、復制虛擬機&#xff0c;搞了5臺。 1&#xff1a;namenode&#xff0c;resourcemanager 2&#xff1a;secondardNameNode 3&#xff0c;4&#xff0c;5&#xff1a;DataNode 2、修改了網卡配置&#xff0c;連接上SecureCRT ---------root----用戶---------- 3、date查看了…

ps把圖摳到html里,ps摳圖教程:手把手教你如何用ps摳頭發絲

PS摳圖是現在常見的摳圖方法之一&#xff0c;色塊分明的圖是很好摳的&#xff0c;但是如果是需要摳出來的物體是細微凌亂的呢&#xff1f;就像頭發絲。PS如何摳頭發絲才能毫無P圖痕跡&#xff1f;如何摳頭發絲一類的圖像呢&#xff0c;本文介紹的是使用通道結合其余一些命令完成…

臻識科技用全智能相機,把智慧城市的交通/安防/工業制造做到極致

儼然&#xff0c;智慧城市已經是一個技術密集、資本密集、巨頭密集、關注度密集的大熱門領域。 從技術層面來看&#xff0c;智慧城市對當下熱門技術進行了綜合&#xff1a;Cloud、Big Data、AI、AR/VR、5G、IoT、Quantum Computing、Edge Computing、 Block Chain等&#xff0…

熱式氣體質量流量計檢定規程_寧夏熱式氣體質量流量計價位,玻璃管液位計怎么樣...

金湖中原儀表有限公司為您詳細解讀eJxKfc寧夏熱式氣體質量流量計價位的相關知識與詳情&#xff0c;氣體流量計是計量氣體流量的儀表。安拆正在管路中記載流過的氣體量。能夠丈量煤氣&#xff0c;空氣&#xff0c;氮氣&#xff0c;乙炔&#xff0c;&#xff0c;氫氣&#xff0c;…

自己從零安裝hadoop-HA集群

總體步驟 1、分配機器&#xff0c;各安裝什么軟件 2、每個節點設置時間一致&#xff0c;設置開機自動校驗時間。 3、每個節點修改主機名。 4、每個節點配置hosts。 5、每個節點關閉防火墻。 6、上傳JDK&#xff0c;配置JDK 7、創建hadoop用戶。 8、給hadoop用戶配置root…

高校學計算機研究生錄取分數排名,四川大學計算機學院2018年碩士研究生招生擬錄取名單及成績公示...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓四川大學計算機學院2018年碩士研究生招生擬錄取名單公示(全日制)姓名 擬錄取專業 總成績 初試成績 復試成績 備注白迪 計算機技術 75.3 353 160白婉玉 計算機技術 79.35 369 169.8曾春明 計算機技術 74.7 350 158.8陳澄 計算機技術…