python __doPostBack asp文件的抓取

分析網(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表單
首頁:


image

二級頁面:


image

三級頁面:
image

分析抓取內(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ù)议蟆。那么必須有一二級頁面的鏈接,才行萎战。


image

結(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"
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末彩届,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子誓酒,更是在濱河造成了極大的恐慌樟蠕,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異坯墨,居然都是意外死亡寂汇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門捣染,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骄瓣,“玉大人,你說我怎么就攤上這事耍攘¢爬福” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵蕾各,是天一觀的道長扒磁。 經(jīng)常有香客問我,道長式曲,這世上最難降的妖魔是什么妨托? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮吝羞,結(jié)果婚禮上兰伤,老公的妹妹穿的比我還像新娘。我一直安慰自己钧排,他們只是感情好敦腔,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著恨溜,像睡著了一般符衔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上糟袁,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天判族,我揣著相機與錄音,去河邊找鬼项戴。 笑死形帮,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的肯尺。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼躯枢,長吁一口氣:“原來是場噩夢啊……” “哼则吟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起锄蹂,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤氓仲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敬扛,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡晰洒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了啥箭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谍珊。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖急侥,靈堂內(nèi)的尸體忽然破棺而出砌滞,到底是詐尸還是另有隱情,我是刑警寧澤坏怪,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布贝润,位于F島的核電站,受9級特大地震影響铝宵,放射性物質(zhì)發(fā)生泄漏打掘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一鹏秋、第九天 我趴在偏房一處隱蔽的房頂上張望尊蚁。 院中可真熱鬧,春花似錦拼岳、人聲如沸枝誊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叶撒。三九已至,卻和暖如春耐版,著一層夾襖步出監(jiān)牢的瞬間祠够,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工粪牲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留古瓤,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓腺阳,卻偏偏與公主長得像落君,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子亭引,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,517評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫绎速、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,029評論 4 62
  • “慎獨”一詞焙蚓,出自秦漢之際儒家著作《禮記?中庸》一書:“莫見乎隱纹冤,莫顯乎微洒宝,故君子慎其獨也∶染”所謂慎獨雁歌,就是在別人...
    尹潤中閱讀 701評論 0 1
  • 提示:我這里只是自己的淺薄的理解,具體語法可以參考w3cschool動態(tài)內(nèi)存的語法以及實例知残。 new和delete...
    路路Rol閱讀 181評論 0 0
  • 一靠瞎、模擬垂直滾動條 重點在計算,思考滾動條的移動距離和盒子中內(nèi)容的關(guān)系橡庞!滾動條移動一像素较坛,內(nèi)容移動多少? = 多出...
    多佳小昕閱讀 170評論 0 0