《网络应用开发》
中国大学排名定向爬虫
系 别:
专 业:
学 号:
姓 名:
报告日期:
年 月 日
目录
1. 大作业目的…………………………………………………… 1
2. 大作业内容……………………………………………………1
3. 需求分析………………………………………………………1
4. 实现思路………………………………………………………2
5. 详细实现………………………………………………………2
6. 源代码…………………………………………………………6
7. 运行结果………………………………………………………10
8. 大作业小结……………………………………………………13
正文小四、宋体,1.5 倍行距
一、 大作业目的
对所学知识融会贯通,能综合运用所学知识开发一款符合题目要求、具有
一定规模的爬虫。
二、 大作业内容
目标网址:http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html
目标内容:如下图所示内容,包括排名,大学名称,总分。
(1)从网络上获取大学排名网页内容;
(2)提取网页内容中信息;
(3)把提取的信息保存为 CSV 格式;
三、 需求分析
需求:利用 Python 的 requests-bs4 的技术路线,定向爬取(仅对输
入的 URL 进行爬取)由上海交通大学设计的 2019 年‘最好大学网’中国大学排
名情况并输出并保存大学的排名,大学名称,总分到文件中。
分析:
实验的可行性是大前提,在该实验中,我们需要考虑两方面的可行性:
①确定我们想要爬取的信息内容确实被写在了该网页的 html 文件中;
②网络爬虫亦要盗亦有道,需查看网页是否提供了 Robots 协议;
具体操作如下:
(1)访问网址,鼠标右键查看网页源代码;
1
(2)在源代码中查看是否有我们需要的信息,或者直接搜索清华大学查看
(因为大学排名一定有清华)
(3)发现我们所需要的学校排名信息确实被写在 HTML 文件的 td 标签中,
满足第一个可行性
四、 实现思路
第一步:打开 PyCharm 建立 pycodes 文件
第二步:导入或者安装 bs4 库 requests 库,csv 库
第三步:从网络上获取大学排名网页内容 getHTMLText()
第三步:获取我们想要信息的 list fillUnivList():
第四步:输出打印信息并调用保存函数 wcsv()
第五步:保存信息到文件里
第六步:改变大学的数量定义一个可输入函数 TK()
第七步:运行主函数
五、 详细实现
1.从网络上获取大学排名网页内容:
getHTMLText()
#网络爬虫有风险,为增强代码的可靠性,使用异常,如有异常返回空
- 2 -
2.提取网页内容中的信息,并找到合适的数据结构进行存储:
fillUnivList():
(1). 利 用 BeautifulSoup 对 网 页 的 内 容 进 行 解 析 , 用 到 解 析 器
"html.parser"。
(2).观察网页的源代码(上有图),我们发现信息在以 ‘tbody’ 标签为
索引的’tr’标签下的’td’标签中,于是我们需要先在 html 文件中找到‘tbody’
的孩子 ‘tr’,再找到 ‘td’,进而获取信息。
(3).这里需要对 ‘tr’ 进行一次判断,判断什么呢,判断我们找到的这
个 ‘tr’ 确实是标签,而不是字符串。这时需要引入 bs4 包!
3.利用数据结构展示并格式化输出我们想要的结果:
printUnivList()
格式化输出用到 ‘format()’ 函数,利用循环输出的学校信息
- 3 -
4.保存文件
wcsv()导入 csv 库,进行文件保存
5.定义爬取前多少名的大学排名- 4 -
TK():导入 tkinter 库实现一个可输入的框,然后把值赋给 count 列表
- 4 -
6.主程序调用:
main()调用函数的实现
- 5 -
六、 源代码
import requests
from bs4 import BeautifulSoup
import bs4
import csv
from tkinter import *
import tkinter.messagebox as messagebox
result_list=[]
count=[]
def getHTMLText(url):#获取网页内容
try:
r=requests.get(url,timeout=30)
r.raise_for_status()
r.encoding=r.apparent_encoding
- 6 -