爬虫实战——网页抓取及信息提取

第1关:利用URL获取超文本文件并保存至本地

编程要求

利用urllib.request模块中的方法,补全step1()函数。该函数将国防科技大学本科招生信息网中录取分数网页抓取下来,并保存在本地,具体要求:

  1. 正确使用urllib.request的相关函数获取指定url的内容;
  2. 将获取的页面内容,写入本地文件,命名为nudt.txt

 

  1. #********** Begin *********#
  2. # 1.将网页内容保存到data
  3. webpage = req.urlopen(url) # 按照类文件的方式打开网页
  4. data = webpage.read() # 一次性读取网页的所有数据
  5. # 2.将读data以二进制写模式写入以学号命名的 “nudt.txt” 文件:
  6. outfile = open("nudt.txt", 'wb') # 按二进制写方式打开文件
  7. outfile.write(data) # 将网页数据写入文件
  8. outfile.close()
  9. #********** End **********#

注意对齐

第2关:提取子链接

  1. #********** Begin *********#
  2. # 从data中提取2014到2021每一年分数线子网站地址添加到urls列表中
  3. years = [2021,2020,2019,2018,2017,2016, 2015, 2014]
  4. for year in years:
  5. index = data.find("%s年录取分数统计(生长军官学员)" %year)
  6. href= data[index-134:index-97]# 根据单个特征串提取url子串
  7. website = 'https://www.nudt.edu.cn/bkzs/xxgk/lqfs/'
  8. urls.append(website+href)
  9. # #********** End **********#

注意对齐

第3关:网页数据分析

  1. #********** Begin *********#
  2. # 1.按tr标签对获取表格中所有行,保存在列表rows中:
  3. rows = re.findall(r'<tr(.*?)</tr>', firsttable, re.S)
  4. # 2.迭代rows中的所有元素,获取每一行的td标签内的数据,并把数据组成item列表,将每一个item添加到scorelist列表:
  5. scorelist = []
  6. for row in rows:
  7. items = []
  8. tds = re.findall(r'<td.*?>(.*?)</td>', row, re.S)
  9. for td in tds:
  10. rightindex = td.find('</p>') # 返回-1表示没有找到
  11. leftindex = td[:rightindex].rfind('>')
  12. items.append(td[leftindex +1:rightindex])
  13. scorelist.append(items)
  14. # 3.将由省份,分数组成的7元列表(分数不存在的用\代替)作为元素保存到新列表score中,不要保存多余信息
  15. for record in scorelist[2:]:
  16. record.pop()
  17. score.append(record)
  18. #********** End **********#

注意对齐 

 

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值