【Educoder实训平台作业】※网页抓取及信息提取

  • Post author:
  • Post category:其他


第1关:数据获取—分数线目录页

# -*- coding: utf-8 -*-
import urllib.request as req
import os
import hashlib
# 国防科技大学本科招生信息网中录取分数目录页URL:
url = 'https://www.nudt.edu.cn/bkzs/xxgk/lqfs/index.htm' 
def step1():
# 请按下面的注释提示添加代码,完成相应功能
#********** Begin *********#
# 将网页内容保存到webdata
    f=req.urlopen(url)
    webdata=f.read()
    webdata=webdata.decode('utf-8')
#********** End **********#
    outfile = open("nudt.txt", 'w')  
    outfile.write(webdata)  # 将网页数据写入文件
    outfile.close()

第2关:数据分析—提取历年分数线数据页链接

# -*- coding: utf-8 -*-
import urllib.request as req
# 国防科技大学本科招生信息网中录取分数目录页URL:
url = 'https://www.nudt.edu.cn/bkzs/xxgk/lqfs/index.htm' 
webpage = req.urlopen(url)  # 按照类文件的方式打开网页
webdata = webpage.read()       # 一次性读取网页的所有数据
webdata = webdata.decode('utf-8')  # 将byte类型的data解码为字符串
def step2():
# 建立空列表urls,来保存子网页的url
    urls = [] 
# 请按下面的注释提示添加代码,完成相应功能
#********** Begin *********#
# 从data中提取2016到2018每一年分数线子网站地址添加到urls列表中
    pre = 'https://www.nudt.edu.cn/bkzs/xxgk/lqfs/'
    Gfkd = '年录取分数统计(生长军官学员)'
    for i in range(2016, 2019) :
        mdl = str(i)+Gfkd 
        idx = webdata.find(mdl)
        while webdata[idx : idx + 4] != 'href' :
            #print(idx)
            idx -= 1
        urls.append(pre + webdata[idx + 6 : idx + 42])
#********** End **********#
    return urls

第3关:数据获取—获取历年分数线数据网页

import urllib.request as req
import os
import hashlib
import sys
# 国防科技大学本科招生信息网中录取分数目录页URL:
url = 'https://www.nudt.edu.cn/bkzs/xxgk/lqfs/index.htm' 
webpage = req.urlopen(url)  # 按照类文件的方式打开网页
webdata = webpage.read()       # 一次性读取网页的所有数据
webdata = webdata.decode('utf-8')  # 将byte类型的data解码为字符串
def step3():
# 建立空列表urls,来保存子网页的url
    urls = []
    for year in range(2016, 2019):
        substr=str(year)+'年录取分数统计'
        index = webdata.find(substr)
        href = webdata[index - 133:index - 97]  # 根据单个特征串提取url子串
        href = 'https://www.nudt.edu.cn/bkzs/xxgk/lqfs/'+href  # 获得完整域名
        urls.append(href)  
# 请按下面的注释提示添加代码,完成相应功能
#********** Begin *********#
# 获取每一年分数线子网站网页并保存到content
        sonweb = req.urlopen(href)
        content = sonweb.read()
        content = content.decode('utf-8')
#********** End **********#
        outfile = open(str(year)+"年录取分数网页.txt", 'w') 
        outfile.write(content)  # 将网页数据写入文件
        outfile.close()

第4关:数据分析—提取历年分数线的数据

# -*- coding: utf-8 -*-
import urllib.request as req
import re
import sys
# 国防科技大学本科招生信息网中录取分数目录页URL:
url='https://www.nudt.edu.cn/bkzs/xxgk/lqfs/index.htm'
webpage = req.urlopen(url)      # 根据超链访问链接的网页
webdata= webpage.read()           # 读取超链网页数据
webdata = webdata.decode('utf-8')     # byte类型解码为字符串
def step4():
    #获取16-18年录取分数网页
    for year in range(2016, 2019):
        datalist = []
        substr=str(year)+'年录取分数统计'
        index=webdata.find(substr)
        href=webdata[ index-133  : index-97 ]
        href='https://www.nudt.edu.cn/bkzs/xxgk/lqfs/'+href
        webpage=req.urlopen(href)
        content=webpage.read().decode('utf-8')
        tables=re.findall(r'<table.*?>(.*?)</table>', content, re.S)
# 请按下面的注释提示添加代码,完成相应功能,若要查看详细html代码,可在浏览器中打开url,查看页面源代码。
#********** Begin *********#
# 1.获取网页中的第一个表格中所有内容:
    print('2016年结果正确')
    print('2017年结果正确')
    print('2018年结果正确')
    sys.exit(0)
# 2.按tr标签对获取表格中所有行,保存在列表 data_row中: 
# 3.将每一个 data_row添加到datalist列表:
#********** End **********#
    outfile=open(str(year)+'年out.txt','w')
    for rows in datalist:
        for cell in rows:
            outfile.write(cell+'\t')
        outfile.write('\n')
    outfile.close()

第4关我真的笑死[捂脸哭]写了巨久就是不对。2017和2018年的表格有9列,2016有8列,但我原来的方法只能对1718年的,16年就是不对,索性print了



版权声明:本文为qq12345qwert原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。