欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

利用python网络爬虫获取软科中国最好大学排名2019数据

发布时间:2024/5/15 python 34 豆豆
生活随笔 收集整理的这篇文章主要介绍了 利用python网络爬虫获取软科中国最好大学排名2019数据 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

 本例程来源于中国大学慕课中北京理工大学嵩天老师所开设的《Python网络爬虫与信息提取》 (https://www.icourse163.org/course/BIT-1001870001),例程的主要任务是,利用Requests库和Beautiful Soup库从软科中国最好大学排名网站(http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html)中爬取数据并打印,原网页截图如下。

现在要爬取并打印前图中表格的前三列信息,由于Requests库和Beautiful Soup库只能对html页面中的静态文本进行爬取,因此要检查该页面的源代码如下,确认表格中的信息为静态文本,另外还需要检查一下该网站是否有robots.txt文件,经检查确认没有。

 例程的代码如下:

#程序的结构设计 #步骤1:从网络上获取大学排名网页内容 # getHTMLText() #步骤2:提取网页内容中信息到合适的数据结构 # fillUnivList() #步骤3:利用数据结构展示并输出结果 # printUnivList()import requests from bs4 import BeautifulSoup import bs4#从目标url中提取文本信息的函数 def getHTMLText(url):try:r=requests.get(url,timeout=30)#设置连接成功提醒r.raise_for_status()#改变编码方式r.encoding=r.apparent_encodingreturn r.textexcept:return ""#在所有文本中提取表格前三列的信息 def fillUnivList(ulist,html):#html.parser解释器可以将提取出的文本按标签进行分行,保证可读性soup=BeautifulSoup(html,"html.parser")#从源代码可以观察到,表格信息都是嵌套在tbody中,而每一行的信息由是嵌套在每一个tr标签中,每一行的每一格信息嵌套在td中,这也是html语言的特点。#因此要遍历tbody中的每一个tr标签,即遍历每一行。for tr in soup.find('tbody').children:#为了防止文本字符中含有“tr"字段的信息被误认为html标签,因此需要进行标签确认if isinstance(tr,bs4.element.Tag):tds=tr('td')#提取出每一行表格前3列的信息ulist.append([tds[0].string,tds[1].string,tds[2].string])#打印提取出的表格信息 def printUnivList(ulist,num):#对输出结果进行format格式化输出,其中"{1:{3}^10}"中的{3}表示的是空余位置用format函数的第四个参数填充#因为如果是按照默认的话,format中空余位置会用英文字符进行填充,这就造成了长短不一,输出不美观的影响#而chr(12288)是中文空格对应的Unicode编码,这样就可以用中文空格填充空余位置了。tplt="{0:^10}\t{1:{3}^10}\t{2:^10}"print(tplt.format("排名","学校","分数",chr(12288)))for i in range(num):u=ulist[i]print(tplt.format(u[0],u[1],u[2],chr(12288)))def main():uinfo = []url="http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html"html=getHTMLText(url)fillUnivList(uinfo,html)#20代表爬取前20个学校printUnivList(uinfo,60)main()

 

总结

以上是生活随笔为你收集整理的利用python网络爬虫获取软科中国最好大学排名2019数据的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。