第1关:利用URL获取超文本文件并保存至本地
编程要求
利用urllib.request
模块中的方法,补全step1()
函数。该函数将国防科技大学本科招生信息网中录取分数网页抓取下来,并保存在本地,具体要求:
- 正确使用
urllib.request
的相关函数获取指定url
的内容; - 将获取的页面内容,写入本地文件,命名为
nudt.txt
。
#********** Begin *********#
# 1.将网页内容保存到data
webpage = req.urlopen(url) # 按照类文件的方式打开网页
data = webpage.read() # 一次性读取网页的所有数据
# 2.将读data以二进制写模式写入以学号命名的 “nudt.txt” 文件:
outfile = open("nudt.txt", 'wb') # 按二进制写方式打开文件
outfile.write(data) # 将网页数据写入文件
outfile.close()
#********** End **********#
注意对齐
第2关:提取子链接
#********** Begin *********#
# 从data中提取2014到2021每一年分数线子网站地址添加到urls列表中
years = [2021,2020,2019,2018,2017,2016, 2015, 2014]
for year in years:
index = data.find("%s年录取分数统计(生长军官学员)" %year)
href= data[index-134:index-97]# 根据单个特征串提取url子串
website = 'https://www.nudt.edu.cn/bkzs/xxgk/lqfs/'
urls.append(website+href)
# #********** End **********#
注意对齐
第3关:网页数据分析
#********** Begin *********#
# 1.按tr标签对获取表格中所有行,保存在列表rows中:
rows = re.findall(r'<tr(.*?)</tr>', firsttable, re.S)
# 2.迭代rows中的所有元素,获取每一行的td标签内的数据,并把数据组成item列表,将每一个item添加到scorelist列表:
scorelist = []
for row in rows:
items = []
tds = re.findall(r'<td.*?>(.*?)</td>', row, re.S)
for td in tds:
rightindex = td.find('</p>') # 返回-1表示没有找到
leftindex = td[:rightindex].rfind('>')
items.append(td[leftindex +1:rightindex])
scorelist.append(items)
# 3.将由省份,分数组成的7元列表(分数不存在的用\代替)作为元素保存到新列表score中,不要保存多余信息
for record in scorelist[2:]:
record.pop()
score.append(record)
#********** End **********#
注意对齐