python __doPostBack asp文件的抓取

分析网站

网站url:https://www.studyinaustralia.gov.au/SIASearch/SIASearchResults.aspx?moduleId=13&mode=1&Keyword=Adelaide+University
首先根据网址,网站页面采用asp语言编写的。
其次查看想要抓取得数据是深层次的三级结构。想要抓到最终的数据,那么就要依次获取第二层数据,第一层数据。
其次再看页面跳转,当选择第二页,第三页时。网页的请求链接是不变的,则不能用直接通过链接来抓取数据的方法了,只能模拟网站请求,或者模拟网站点击()。
使用chrome 浏览器 ,进行网络请求时,header中 包含 formdata数据。本质上,只要使用sumbit提交数据时,携带必要的formdata数据就可以了。
查看网站的源代码,发现每一页的link只是 eventTarget, eventArgument 。分析发现,eventTarget 是固定的函数。eventArgument 是页码,
以上理清之后,就可以开始考虑抓包进度了。

2 

function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}

采用的是asp的form表单
首页:


python __doPostBack asp文件的抓取_第1张图片
image

二级页面:


python __doPostBack asp文件的抓取_第2张图片
image

三级页面:
python __doPostBack asp文件的抓取_第3张图片
image

分析抓取内容

网页抓取的是不规则的表单数据,则考虑使用json保存数据格式。
如果是规则的表单数据则可以考虑使用 csv保存数据格式。

    "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"

梳理逻辑

分析抓取的页面逻辑路径,想要获取结果页的数据。那么必须有一二级页面的链接,才行。


python __doPostBack asp文件的抓取_第4张图片
image

结果实现

step1:获取搜索页面第一页,进入二级页面的所有链接
step2:获取二级页面进入三级页面的所有链接
step3:三级详情页面的数据抓取
step4:根据层次结构写入到字典中

step5:循环算法,依次获取第二页的数据。第三页的数据,以及所有的数据。

效果展示

源代码:

# _*_ 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"})

                    # 将数据写入字典中去
                    dict3 = {}
                    dict3.setdefault('title',title.string)
                    for index3,thirdR_detaildiv_lable in enumerate(thirdR_detaildiv_lable_array):
                        # list1.insert(thirdR_detaildiv_lable.string)
                    
                        # 数据追加到字典中去
                        dict3.setdefault(thirdR_detaildiv_lable.string,thirdR_detaildiv_div_array[index3].string)  
                        # print(thirdR_detaildiv_div_array[index].string)
                    #因为可能json有unicode编码,最好用codecs保存utf-8文件
                    #把字典转成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())

代码优化,及bug修复。
修复了,数据读取不全的问题
py代码函数化,方便理解

# _*_ 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  # 从第几页开始抓取数据
__MaxPage = 21 # 最大页码数


# 第三级页面的数据抓取
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"})

        # 将数据写入字典中去
        dict3 = {}
        dict3.setdefault('title',title.string)
        for index3,thirdR_detaildiv_lable in enumerate(thirdR_detaildiv_lable_array):
            # list1.insert(thirdR_detaildiv_lable.string)

            # 数据追加到字典中去
            dict3.setdefault(thirdR_detaildiv_lable.string,thirdR_detaildiv_div_array[index3].string)  
            # print(thirdR_detaildiv_div_array[index].string)
        #因为可能json有unicode编码,最好用codecs保存utf-8文件
        #把字典转成json字符串
        return dict3


#第二级页面的数据抓取
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

# 首级页面的数据抓取
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表单请求
# 获取页面的链接源代码数据
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()

代码优化,及bug修复。
修复了,当网络秦秋失败后,可以直接读取任意页面,而不用重第一页开始。

# _*_ 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 # 从第几页开始抓取数据
__MaxPage = 110 # 最大页码数
local_jump_index = 11
Go_On = False  # 是否继续重新从最开始请求数据
br = mechanize.Browser()
# 第三级页面的数据抓取
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"})

        # 将数据写入字典中去
        dict3 = {}
        dict3.setdefault('title',title.string)
        
        for index3,thirdR_detaildiv_lable in enumerate(thirdR_detaildiv_lable_array):
            # list1.insert(thirdR_detaildiv_lable.string)

            # 数据追加到字典中去
            dict3.setdefault(thirdR_detaildiv_lable.string,thirdR_detaildiv_div_array[index3].string) 
            
            # print(thirdR_detaildiv_div_array[index].string)
        #因为可能json有unicode编码,最好用codecs保存utf-8文件
        #把字典转成json字符串
        # print(dict3) 
        return dict3


#第二级页面的数据抓取
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

# 首级页面的数据抓取
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表单请求
# 递归函数 ,依次请求第11页数据,第21页数据,第31页数据。从而快速的跳转到指定的页面。
# 解决问题:由于该网站,不能直接请求大于10的页面,需要依次页面,才能请求数据。
# 出现情况:页面请求中断,或者网络问题抓取中断的,快速跳转到抓取页面的办法。
'''
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

# 获取页面的链接源代码数据
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()

结果分页写入到json文件中
结果:

{
    "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"
        }
    }
}

你可能感兴趣的:(python __doPostBack asp文件的抓取)