分析網(wǎng)站
網(wǎng)站url:https://www.studyinaustralia.gov.au/SIASearch/SIASearchResults.aspx?moduleId=13&mode=1&Keyword=Adelaide+University
首先根據(jù)網(wǎng)址捕仔,網(wǎng)站頁面采用asp語言編寫的灸眼。
其次查看想要抓取得數(shù)據(jù)是深層次的三級結(jié)構(gòu)。想要抓到最終的數(shù)據(jù)动分,那么就要依次獲取第二層數(shù)據(jù)裤翩,第一層數(shù)據(jù)。
其次再看頁面跳轉(zhuǎn),當選擇第二頁,第三頁時朝蜘。網(wǎng)頁的請求鏈接是不變的,則不能用直接通過鏈接來抓取數(shù)據(jù)的方法了,只能模擬網(wǎng)站請求涩金,或者模擬網(wǎng)站點擊()芹务。
使用chrome 瀏覽器 ,進行網(wǎng)絡請求時鸭廷,header中 包含 formdata數(shù)據(jù)。本質(zhì)上熔吗,只要使用sumbit提交數(shù)據(jù)時辆床,攜帶必要的formdata數(shù)據(jù)就可以了。
查看網(wǎng)站的源代碼桅狠,發(fā)現(xiàn)每一頁的link只是 eventTarget, eventArgument 讼载。分析發(fā)現(xiàn),eventTarget 是固定的函數(shù)中跌。eventArgument 是頁碼咨堤,
以上理清之后,就可以開始考慮抓包進度了漩符。
<a href="javascript:__doPostBack('ctl00$ctl00$ctl00$nestedAreaTwo$ContentPlaceHolderMainNoAjax$ContentPlaceHolderMainNoAjax$SIACourseSearchResults$CoursesSearchResults','Page$2')">2</a>
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
采用的是asp的form表單
首頁:
二級頁面:
三級頁面:
分析抓取內(nèi)容
網(wǎng)頁抓取的是不規(guī)則的表單數(shù)據(jù)一喘,則考慮使用json保存數(shù)據(jù)格式。
如果是規(guī)則的表單數(shù)據(jù)則可以考慮使用 csv保存數(shù)據(jù)格式。
"Detailed Field:": "060119 - General Practice",
"Course Level:": "GC - Graduate Certificate",
"Work Component Weeks:": null,
"Course Sector:": "Higher Education",
"title": "Graduate Certificate in Counselling and Psychotherapy",
"CRICOS Course Code:": "072306G",
"Work Component:": "No",
"Estimated Total Course Cost:": "$17,000",
"Work Component Hours/Week:": null,
"Dual Qualification:": "No",
"Duration (Weeks):": "26",
"Narrow Field:": "0601 - Medical Studies",
"VET National Code:": null,
"Work Component Total Hours:": null,
"Broad Field:": "06 - Health",
"Foundation Studies:": "No",
"Course Language:": "English"
梳理邏輯
分析抓取的頁面邏輯路徑凸克,想要獲取結(jié)果頁的數(shù)據(jù)议蟆。那么必須有一二級頁面的鏈接,才行萎战。
結(jié)果實現(xiàn)
step1:獲取搜索頁面第一頁咐容,進入二級頁面的所有鏈接
step2:獲取二級頁面進入三級頁面的所有鏈接
step3:三級詳情頁面的數(shù)據(jù)抓取
step4:根據(jù)層次結(jié)構(gòu)寫入到字典中
step5:循環(huán)算法,依次獲取第二頁的數(shù)據(jù)蚂维。第三頁的數(shù)據(jù)戳粒,以及所有的數(shù)據(jù)。
效果展示
源代碼:
# _*_ coding:utf-8 _*_
import re
from bs4 import BeautifulSoup
import requests
import codecs
import json
import urllib
from scrapy.http import FormRequest
import mechanize
url = "https://www.studyinaustralia.gov.au/SIASearch/SIASearchResults.aspx?moduleId=13&mode=1&Keyword=Adelaide+University"
r = requests.get(url)
root_url = "https://www.studyinaustralia.gov.au"
data = ""
# dict2 = {}
headers = ''
session = requests.Session()
br = mechanize.Browser()
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
response = br.open(url)
dict0 = {}
# 頁碼
for i in range(0,21):
html = response.read()
# print "Page %d :" % i, html
# br.select_form("aspnetForm")
br.form = list(br.forms())[0]
# br.select_form(nr=0)
# print br.form
br.set_all_readonly(False)
s = BeautifulSoup(html,"html5lib")
for control in br.form.controls:
if control.type == "submit":
control.disabled = True
# print('==========')
tdata = s.find("table", {"class": "SIASearchResults"})
br["__EVENTTARGET"] ='ctl00$ctl00$ctl00$nestedAreaTwo$ContentPlaceHolderMainNoAjax$ContentPlaceHolderMainNoAjax$SIACourseSearchResults$CoursesSearchResults'
if i == 0:
pass
# response2 = requests.get(url)
# s = BeautifulSoup(response2.content,"html5lib")
else:
br["__EVENTARGUMENT"] = 'Page$'+str(i+1)
response2 = br.submit()
# if response2.status_code == response2.codes.ok:
# print("======")
s = BeautifulSoup(response2.read(),"html5lib")
tdata = s.find("table", {"class": "SIASearchResults"})
firstLinkdata_array = tdata.findAll("td",{"class":"SIASeachColumn1"})
dict1 = {}
for index1,firstLinkdata in enumerate(firstLinkdata_array):
data_a = firstLinkdata.find("a",href=True)
WebHref = data_a["href"] # step1 OK Get first href end
# step2 Get second href begin
secondR = requests.get(root_url + WebHref)
if secondR.status_code == requests.codes.ok:
second_s = BeautifulSoup(secondR.content,"html5lib")
second_tdata = second_s.find("table", {"class": "SIAResultsList"})
secondLinkdata_array = second_tdata.findAll("td",{"class":"SIAResultsColumn9"})
for index2,secondLinkdata in enumerate(secondLinkdata_array):
dict2 = {}
second_data_a = secondLinkdata.find("a",href=True)
second_WebHref = second_data_a["href"] # step2 OK Get second href end
# step3 Get Third want to attribute begin
thirdR = requests.get(root_url +'/SIASearch/'+ second_WebHref)
if thirdR.status_code == requests.codes.ok:
thirdR_s = BeautifulSoup(thirdR.content,"html5lib")
thirdR_tdata = thirdR_s.find("div", {"id": "MainDetails"})
thirdR_detaildiv_lable_array = thirdR_tdata.findAll("label")
thirdR_detaildiv_div_array = thirdR_s.findAll("div", {"class": "details"})
title = thirdR_s.find("span", {"id": "ctl00_ctl00_ctl00_nestedAreaTwo_ContentPlaceHolderMainNoAjax_ContentPlaceHolderMainNoAjax_lblTitle"})
# 將數(shù)據(jù)寫入字典中去
dict3 = {}
dict3.setdefault('title',title.string)
for index3,thirdR_detaildiv_lable in enumerate(thirdR_detaildiv_lable_array):
# list1.insert(thirdR_detaildiv_lable.string)
# 數(shù)據(jù)追加到字典中去
dict3.setdefault(thirdR_detaildiv_lable.string,thirdR_detaildiv_div_array[index3].string)
# print(thirdR_detaildiv_div_array[index].string)
#因為可能json有unicode編碼虫啥,最好用codecs保存utf-8文件
#把字典轉(zhuǎn)成json字符串
print(index1)
dict2.setdefault(index2,dict3)
# with codecs.open("studyinaustralia"+".json", 'a+', 'utf-8') as f:
# f.write(json.dumps(dict2))
dict1.setdefault(index1,dict2)
json_text = json.dumps(dict1)
with codecs.open("studyinaustralia"+ str(i+1) +".json", 'a+', 'utf-8') as f:
f.write(json_text)
# with codecs.open('123.html', 'a+') as f:
# f.write(response2.read())
代碼優(yōu)化蔚约,及bug修復。
修復了孝鹊,數(shù)據(jù)讀取不全的問題
py代碼函數(shù)化炊琉,方便理解
# _*_ coding:utf-8 _*_
import re
from bs4 import BeautifulSoup
import requests
import codecs
import json
import urllib
from scrapy.http import FormRequest
import mechanize
url = "https://www.studyinaustralia.gov.au/SIASearch/SIASearchResults.aspx?moduleId=13&mode=1&Keyword=Adelaide+University"
r = requests.get(url)
root_url = "https://www.studyinaustralia.gov.au"
__EVENTTARGET = "ctl00$ctl00$ctl00$nestedAreaTwo$ContentPlaceHolderMainNoAjax$ContentPlaceHolderMainNoAjax$SIACourseSearchResults$CoursesSearchResults"
__Page = 0 # 從第幾頁開始抓取數(shù)據(jù)
__MaxPage = 21 # 最大頁碼數(shù)
# 第三級頁面的數(shù)據(jù)抓取
def thirdDict(second_WebHref):
# step3 Get Third want to attribute begin
thirdR = requests.get(root_url +'/SIASearch/'+ second_WebHref)
if thirdR.status_code == requests.codes.ok:
thirdR_s = BeautifulSoup(thirdR.content,"html5lib")
thirdR_tdata = thirdR_s.find("div", {"id": "MainDetails"})
thirdR_detaildiv_lable_array = thirdR_tdata.findAll("label")
thirdR_detaildiv_div_array = thirdR_s.findAll("div", {"class": "details"})
title = thirdR_s.find("span", {"id": "ctl00_ctl00_ctl00_nestedAreaTwo_ContentPlaceHolderMainNoAjax_ContentPlaceHolderMainNoAjax_lblTitle"})
# 將數(shù)據(jù)寫入字典中去
dict3 = {}
dict3.setdefault('title',title.string)
for index3,thirdR_detaildiv_lable in enumerate(thirdR_detaildiv_lable_array):
# list1.insert(thirdR_detaildiv_lable.string)
# 數(shù)據(jù)追加到字典中去
dict3.setdefault(thirdR_detaildiv_lable.string,thirdR_detaildiv_div_array[index3].string)
# print(thirdR_detaildiv_div_array[index].string)
#因為可能json有unicode編碼,最好用codecs保存utf-8文件
#把字典轉(zhuǎn)成json字符串
return dict3
#第二級頁面的數(shù)據(jù)抓取
def secondDict(WebHref):
# step2 Get second href begin
secondR = requests.get(root_url + WebHref)
if secondR.status_code == requests.codes.ok:
second_s = BeautifulSoup(secondR.content,"html5lib")
second_tdata = second_s.find("table", {"class": "SIAResultsList"})
secondLinkdata_array = second_tdata.findAll("td",{"class":"SIAResultsColumn9"})
dict2 = {}
for index2,secondLinkdata in enumerate(secondLinkdata_array):
second_data_a = secondLinkdata.find("a",href=True)
second_WebHref = second_data_a["href"] # step2 OK Get second href end
dict3 = thirdDict(second_WebHref)
dict2.setdefault(index2,dict3)
return dict2
# 首級頁面的數(shù)據(jù)抓取
def firstDict(s):
tdata = s.find("table", {"class": "SIASearchResults"})
firstLinkdata_array = tdata.findAll("td",{"class":"SIASeachColumn1"})
dict1 = {}
for index1,firstLinkdata in enumerate(firstLinkdata_array):
data_a = firstLinkdata.find("a",href=True)
WebHref = data_a["href"] # step1 OK Get first href end
dict2 = secondDict(WebHref)
dict1.setdefault(index1,dict2)
print(index1)
return dict1
# 模擬瀏覽器的form表單請求
# 獲取頁面的鏈接源代碼數(shù)據(jù)
def main():
# session = requests.Session()
br = mechanize.Browser()
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
response = br.open(url)
dict0 = {}
for i in range(__Page,__MaxPage):
html = response.read()
# print "Page %d :" % i, html
# br.select_form("aspnetForm")
br.form = list(br.forms())[0]
# br.select_form(nr=0)
# print br.form
br.set_all_readonly(False)
s = BeautifulSoup(html,"html5lib")
for control in br.form.controls:
if control.type == "submit":
control.disabled = True
# print('==========')
br["__EVENTTARGET"] = __EVENTTARGET
if i == 0:
pass
else:
br["__EVENTARGUMENT"] = 'Page$'+str(i+1)
response2 = br.submit()
s = BeautifulSoup(response2.read(),"html5lib")
dict1 = firstDict(s)
json_text = json.dumps(dict1)
with codecs.open("studyinaustralia"+ str(i+1) +".json", 'a+', 'utf-8') as f:
f.write(json_text)
# print(dict1)
if __name__ == '__main__':
main()
代碼優(yōu)化又活,及bug修復苔咪。
修復了,當網(wǎng)絡秦秋失敗后柳骄,可以直接讀取任意頁面团赏,而不用重第一頁開始。
# _*_ coding:utf-8 _*_
import re
from bs4 import BeautifulSoup
import requests
import codecs
import json
import urllib
from scrapy.http import FormRequest
import mechanize
url = "https://www.studyinaustralia.gov.au/SIASearch/SIASearchResults.aspx?moduleId=13&mode=1&Keyword=University"
r = requests.get(url)
root_url = "https://www.studyinaustralia.gov.au"
__EVENTTARGET = "ctl00$ctl00$ctl00$nestedAreaTwo$ContentPlaceHolderMainNoAjax$ContentPlaceHolderMainNoAjax$SIACourseSearchResults$CoursesSearchResults"
__Page = 36 # 從第幾頁開始抓取數(shù)據(jù)
__MaxPage = 110 # 最大頁碼數(shù)
local_jump_index = 11
Go_On = False # 是否繼續(xù)重新從最開始請求數(shù)據(jù)
br = mechanize.Browser()
# 第三級頁面的數(shù)據(jù)抓取
def thirdDict(second_WebHref):
# print(second_WebHref)
# step3 Get Third want to attribute begin
thirdR = requests.get(root_url +'/SIASearch/'+ second_WebHref)
if thirdR.status_code == requests.codes.ok:
thirdR_s = BeautifulSoup(thirdR.content,"html5lib")
thirdR_tdata = thirdR_s.find("div", {"id": "MainDetails"})
thirdR_detaildiv_lable_array = thirdR_tdata.findAll("label")
thirdR_detaildiv_div_array = thirdR_s.findAll("div", {"class": "details"})
title = thirdR_s.find("span", {"id": "ctl00_ctl00_ctl00_nestedAreaTwo_ContentPlaceHolderMainNoAjax_ContentPlaceHolderMainNoAjax_lblTitle"})
# 將數(shù)據(jù)寫入字典中去
dict3 = {}
dict3.setdefault('title',title.string)
for index3,thirdR_detaildiv_lable in enumerate(thirdR_detaildiv_lable_array):
# list1.insert(thirdR_detaildiv_lable.string)
# 數(shù)據(jù)追加到字典中去
dict3.setdefault(thirdR_detaildiv_lable.string,thirdR_detaildiv_div_array[index3].string)
# print(thirdR_detaildiv_div_array[index].string)
#因為可能json有unicode編碼耐薯,最好用codecs保存utf-8文件
#把字典轉(zhuǎn)成json字符串
# print(dict3)
return dict3
#第二級頁面的數(shù)據(jù)抓取
def secondDict(WebHref):
# step2 Get second href begin
secondR = requests.get(root_url + WebHref)
if secondR.status_code == requests.codes.ok:
second_s = BeautifulSoup(secondR.content,"html5lib")
second_tdata = second_s.find("table", {"class": "SIAResultsList"})
secondLinkdata_array = second_tdata.findAll("td",{"class":"SIAResultsColumn9"})
dict2 = {}
for index2,secondLinkdata in enumerate(secondLinkdata_array):
print("second link"+ str(index2))
second_data_a = secondLinkdata.find("a",href=True)
second_WebHref = second_data_a["href"] # step2 OK Get second href end
dict3 = thirdDict(second_WebHref)
dict2.setdefault(index2,dict3)
return dict2
# 首級頁面的數(shù)據(jù)抓取
def firstDict(s):
tdata = s.find("table", {"class": "SIASearchResults"})
firstLinkdata_array = tdata.findAll("td",{"class":"SIASeachColumn1"})
dict1 = {}
for index1,firstLinkdata in enumerate(firstLinkdata_array):
print("first link")
data_a = firstLinkdata.find("a",href=True)
WebHref = data_a["href"] # step1 OK Get first href end
dict2 = secondDict(WebHref)
dict1.setdefault(index1,dict2)
return dict1
'''
# 模擬瀏覽器的form表單請求
# 遞歸函數(shù) 舔清,依次請求第11頁數(shù)據(jù),第21頁數(shù)據(jù)曲初,第31頁數(shù)據(jù)体谒。從而快速的跳轉(zhuǎn)到指定的頁面。
# 解決問題:由于該網(wǎng)站臼婆,不能直接請求大于10的頁面抒痒,需要依次頁面,才能請求數(shù)據(jù)颁褂。
# 出現(xiàn)情況:頁面請求中斷故响,或者網(wǎng)絡問題抓取中斷的,快速跳轉(zhuǎn)到抓取頁面的辦法颁独。
'''
def JumpPage(Page):
global local_jump_index
global br
br.form = list(br.forms())[0]
br.set_all_readonly(False)
br["__EVENTTARGET"] = __EVENTTARGET
for control in br.form.controls:
if control.type == "submit":
control.disabled = True
br["__EVENTARGUMENT"] = 'Page$'+ str(local_jump_index)
response2 = br.submit()
local_jump_index += 10
if local_jump_index <= Page:
print(local_jump_index)
JumpPage(Page)
# print '\n'.join(['%s:%s' % item for item in response2.__dict__.items()])
print(br)
global Go_On
Go_On = True
return br
# 獲取頁面的鏈接源代碼數(shù)據(jù)
def main():
# session = requests.Session()
# br = mechanize.Browser()
global br
global Go_On
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
response = br.open(url)
html = response.read()
s = BeautifulSoup(html,"html5lib")
for i in range(__Page,__MaxPage):
dict0 = {}
if i == 0:
# html = response.read()
# br.form = list(br.forms())[0]
# br.set_all_readonly(False)
# s = BeautifulSoup(html,"html5lib")
pass
else:
if Go_On == False and __Page > 10:
JumpPage(__Page)
# br.form = list(br.forms())[0]
# br.set_all_readonly(False)
# br["__EVENTARGUMENT"] = 'Page$'+ str(12)
# response2 = br.submit()
# br.form = list(br.forms())[0]
# br.set_all_readonly(False)
# br["__EVENTARGUMENT"] = 'Page$'+ str(22)
# response2 = br.submit()
# br = Backbr
Go_On = True
print("page:" + str(i))
# global br
br.form = list(br.forms())[0]
br.set_all_readonly(False)
br["__EVENTARGUMENT"] = 'Page$'+str(i+1)
br["__EVENTTARGET"] = __EVENTTARGET
for control in br.form.controls:
if control.type == "submit":
control.disabled = True
# print('==========')
response2 = br.submit()
s = BeautifulSoup(response2.read(),"html5lib")
# with codecs.open("studyinaustralia.html", 'w+') as f:
# # dir(response2)
# f.write(str(s))
# exit()
dict0 = firstDict(s)
json_text = json.dumps(dict0)
with codecs.open("studyinaustralia"+ str(i+1) +".json", 'a+', 'utf-8') as f:
f.write(json_text)
print(dict0)
if __name__ == '__main__':
main()
結(jié)果分頁寫入到json文件中
結(jié)果:
{
"0": {
"0": {
"Detailed Field:": "030999 - Civil Engineering, n.e.c.",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Civil and Environmental)",
"CRICOS Course Code:": "082080E",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$157,000",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "No",
"Duration (Weeks):": "208",
"Narrow Field:": "0309 - Civil Engineering",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"1": {
"0": {
"Detailed Field:": "030999 - Civil Engineering, n.e.c.",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Civil and Environmental)/Bachelor of Arts",
"CRICOS Course Code:": "082081D",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$202,000",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "Yes",
"Duration (Weeks):": "260",
"Narrow Field:": "0309 - Civil Engineering",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"2": {
"0": {
"Detailed Field:": "030900 - Civil Engineering, n.f.d.",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Civil and Environmental)/Bachelor of Finance",
"CRICOS Course Code:": "082082C",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$202,000",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "Yes",
"Duration (Weeks):": "260",
"Narrow Field:": "0309 - Civil Engineering",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"3": {
"0": {
"Detailed Field:": "030999 - Civil Engineering, n.e.c.",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Civil and Environmental)/Bachelor of Mathematics and Computer Science",
"CRICOS Course Code:": "082083B",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$202,000",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "Yes",
"Duration (Weeks):": "260",
"Narrow Field:": "0309 - Civil Engineering",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"4": {
"0": {
"Detailed Field:": "030999 - Civil Engineering, n.e.c.",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Civil and Environmental)/Bachelor of Science",
"CRICOS Course Code:": "082084A",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$202,000",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "Yes",
"Duration (Weeks):": "260",
"Narrow Field:": "0309 - Civil Engineering",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"5": {
"0": {
"Detailed Field:": "030903 - Structural Engineering",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Civil and Structural)",
"CRICOS Course Code:": "082085M",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$157,000",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "No",
"Duration (Weeks):": "208",
"Narrow Field:": "0309 - Civil Engineering",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"6": {
"0": {
"Detailed Field:": "030903 - Structural Engineering",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Civil and Structural)/Bachelor of Arts",
"CRICOS Course Code:": "082086K",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$202,000",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "Yes",
"Duration (Weeks):": "260",
"Narrow Field:": "0309 - Civil Engineering",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"7": {
"0": {
"Detailed Field:": "030903 - Structural Engineering",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Civil and Structural)/Bachelor of Finance",
"CRICOS Course Code:": "082087J",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$202,000",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "Yes",
"Duration (Weeks):": "260",
"Narrow Field:": "0309 - Civil Engineering",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"8": {
"0": {
"Detailed Field:": "030903 - Structural Engineering",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Civil and Structural)/Bachelor of Mathematical and Computer Science",
"CRICOS Course Code:": "082088G",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$202,000",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "Yes",
"Duration (Weeks):": "260",
"Narrow Field:": "0309 - Civil Engineering",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"9": {
"0": {
"Detailed Field:": "030903 - Structural Engineering",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Civil and Structural)/Bachelor of Science",
"CRICOS Course Code:": "082090C",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$202,000",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "Yes",
"Duration (Weeks):": "260",
"Narrow Field:": "0309 - Civil Engineering",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"10": {
"0": {
"Detailed Field:": "030903 - Structural Engineering",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Civil, Structural and Environmental)",
"CRICOS Course Code:": "082089G",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$202,000",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "Yes",
"Duration (Weeks):": "260",
"Narrow Field:": "0309 - Civil Engineering",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"11": {
"0": {
"Detailed Field:": "020300 - Information Systems, n.f.d.",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Computer Systems)",
"CRICOS Course Code:": "082091B",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$139,500",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "No",
"Duration (Weeks):": "208",
"Narrow Field:": "0203 - Information Systems",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "02 - Information Technology",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"12": {
"0": {
"Detailed Field:": "031399 - Electrical and Electronic Engineering and Technology, n.e.c.",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Electrical and Electronic)",
"CRICOS Course Code:": "082096G",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$157,000",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "No",
"Duration (Weeks):": "208",
"Narrow Field:": "0313 - Electrical and Electronic Engineering and Technology",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"13": {
"0": {
"Detailed Field:": "031399 - Electrical and Electronic Engineering and Technology, n.e.c.",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Electrical and Electronic) (2014 only)",
"CRICOS Course Code:": "013922F",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$128,000",
"Work Component Hours/Week:": "35.0",
"Dual Qualification:": "No",
"Duration (Weeks):": "208",
"Narrow Field:": "0313 - Electrical and Electronic Engineering and Technology",
"VET National Code:": null,
"Work Component Total Hours:": "420",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"14": {
"0": {
"Detailed Field:": "031399 - Electrical and Electronic Engineering and Technology, n.e.c.",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Electrical and Electronic)/Bachelor of Arts",
"CRICOS Course Code:": "082097G",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$202,000",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "Yes",
"Duration (Weeks):": "260",
"Narrow Field:": "0313 - Electrical and Electronic Engineering and Technology",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"15": {
"0": {
"Detailed Field:": "031301 - Electrical Engineering",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Electrical and Electronic)/Bachelor of Finance",
"CRICOS Course Code:": "082098F",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$202,000",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "Yes",
"Duration (Weeks):": "260",
"Narrow Field:": "0313 - Electrical and Electronic Engineering and Technology",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"16": {
"0": {
"Detailed Field:": "031399 - Electrical and Electronic Engineering and Technology, n.e.c.",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Electrical and Electronic)/Bachelor of Mathematical and Computer Science",
"CRICOS Course Code:": "082099E",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$202,000",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "Yes",
"Duration (Weeks):": "260",
"Narrow Field:": "0313 - Electrical and Electronic Engineering and Technology",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"17": {
"0": {
"Detailed Field:": "031301 - Electrical Engineering",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Electrical and Electronic)/Bachelor of Science(Physics)",
"CRICOS Course Code:": "082100F",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$202,000",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "Yes",
"Duration (Weeks):": "260",
"Narrow Field:": "0313 - Electrical and Electronic Engineering and Technology",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"18": {
"0": {
"Detailed Field:": "030399 - Process and Resources Engineering, n.e.c.",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Electrical and Sustainable Energy)",
"CRICOS Course Code:": "082101E",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$139,500",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "No",
"Duration (Weeks):": "208",
"Narrow Field:": "0303 - Process and Resources Engineering",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
},
"19": {
"0": {
"Detailed Field:": "031501 - Aerospace Engineering",
"Course Level:": "BH - Bachelor Honours Degree",
"Work Component Weeks:": "12",
"Course Sector:": "Higher Education",
"title": "Bachelor of Engineering (Honours) (Mechanical and Aerospace)",
"CRICOS Course Code:": "082102D",
"Work Component:": "Yes",
"Estimated Total Course Cost:": "$157,000",
"Work Component Hours/Week:": "36.8",
"Dual Qualification:": "No",
"Duration (Weeks):": "208",
"Narrow Field:": "0315 - Aerospace Engineering and Technology",
"VET National Code:": null,
"Work Component Total Hours:": "441",
"Broad Field:": "03 - Engineering and Related Technologies",
"Foundation Studies:": "No",
"Course Language:": "English"
}
}
}