20194123向海飞实验四

学号 20194123《Python程序设计》实验四报告

课程:《Python程序设计》
班级: 1941
姓名: 向海飞
学号:20194123
实验教师:王志强
实验日期:2020年6月13日
必修/选修: 公选课

1.实验内容

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
选择:爬虫

2. 实验过程及结果

需要用到 bs4 、正则表达式、requests 的知识
找到网址http://zuihaodaxue.cn/ARWU2015.html

如图知数据块是 tbody,分析得html 中一行对应一个tr,世界排名、国家排名、总分可以直接通过 tr[‘td’] 获得,而学校需要通过 tr[‘td’].a.string 获得,国家/地区需要通过 tr[‘td’].a[‘title’] 获得
过程如下:
导入相关库:

import requests
from bs4 import BeautifulSoup
import bs4

获取网页数据

ef getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""

解析网络数据

ef fillUnivList(ulist, html):
soup = BeautifulSoup(html, "html.parser")
for tr in soup.find('tbody').children:
if isinstance(tr, bs4.element.Tag):
tds = tr('td')
ulist.append([ tds[0].string, tds[1].a.string, tds[2].a['title'], tds[3].string, tds[4].string ])

显示数据

def printUnivList(ulist, num):
tplt = "{0:10}\t{1:44}\t{2:16}\t{3:16}\t{4:^16}"
print(tplt.format("世界排名", "学校名称", "国家/地区", "国家排名", "总分"), chr(12288))
for i in range(num):
u = ulist[i]
print(tplt.format(u[0], u[1], u[2], u[3], u[4]), chr(12288))

def main():
uinfo = []
url = 'http://zuihaodaxue.cn/ARWU2015.html'
html = getHTMLText(url)
fillUnivList(uinfo, html)
printUnivList(uinfo, 80) # 20 univs

if name == 'main':
main()

结果如下图:

3. 实验过程中遇到的问题和解决过程

posted @ 2020-06-14 23:04  哈哈哈哈哈哈哈哈111  阅读(78)  评论(0编辑  收藏