网页爬取综合实例


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

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

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

# -*- coding: utf-8 -*-
import urllib.request as req
import os
import hashlib

# 国防科技大学本科招生信息网中录取分数网页URL:
url = 'https://www.nudt.edu.cn/bkzs/xxgk/lqfs/index.htm'  # 录取分数网页URL


def step1():
# 请按下面的注释提示添加代码,完成相应功能
#********** 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关:提取子链接

仔细阅读网页源代码信息,补全step2()函数。从网页中找到2021到2014年国防科技大学录取分数线统计网页的子链接url数据并提取出来,具体来说:

使用find()函数定位这五个url,并保存在列表urls中(顺序从2021-2014倒序)。
注意:提取的超链是相对地址,需要加上站点域名,拼接成完整的URL。
代码如下:

# -*- coding: utf-8 -*-
import urllib.request as req
# 国防科技大学本科招生信息网中录取分数网页URL:
url = 'https://www.nudt.edu.cn/bkzs/xxgk/lqfs/index.htm'  # 录取分数网页URL
webpage = req.urlopen(url)  # 按照类文件的方式打开网页
data = webpage.read()       # 一次性读取网页的所有数据
data = data.decode('utf-8')  # 将byte类型的data解码为字符串(否则后面查找就要另外处理了)
def step2():
# 建立空列表urls,来保存子网页的url
    urls = []
# 请按下面的注释提示添加代码,完成相应功能
#********** Begin *********#
# 从data中提取20142021每一年分数线子网站地址添加到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 **********#
    return urls

在这里插入图片描述


相关推荐

  1. Python爬虫实战太平洋网络相机文章

    2024-01-07 09:46:01       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-07 09:46:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-07 09:46:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-07 09:46:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-07 09:46:01       18 阅读

热门阅读

  1. Python使用函数求素数和

    2024-01-07 09:46:01       36 阅读
  2. 详解Nacos和Eureka的区别

    2024-01-07 09:46:01       28 阅读
  3. SpringBoot-拓展

    2024-01-07 09:46:01       37 阅读
  4. cocos2d-x lua ProgressTimer

    2024-01-07 09:46:01       41 阅读
  5. C++中的 greate/less 比较器模板的实现原理及作用

    2024-01-07 09:46:01       34 阅读
  6. 普通BUG

    普通BUG

    2024-01-07 09:46:01      30 阅读
  7. 记一个集群环境部署不完整导致的BUG

    2024-01-07 09:46:01       41 阅读
  8. LeetCode2807. Insert Greatest Common Divisors in Linked List

    2024-01-07 09:46:01       30 阅读
  9. HDU 2841:Visible Trees ← 容斥原理

    2024-01-07 09:46:01       41 阅读