爬虫中国最好的大学排名

爬取内容:中国最好的大学排名

输入:大学排名网页的url输入

输出:大学排名信息的屏幕输出

技术路线:requests,bs4

step1:从网络爬取网页内容

step2:提取网页信息到合适的数据结构

step3:利用数据结构展示并输出结果

URL:http://www.zuihaodaxue.cn/zuihaodaxuepaiming2017.html

查看robots协议:http://www.zuihaodaxue.cn/robots.txt

代码:

import requests
import bs4
from bs4 import BeautifulSoup

def getHTMLText(url):
    '''获取网页信息的通用框架'''
    try:
        r=requests.get(url,timeout=30)
        r.raise_for_status()
        r.encoding=r.apparent_encoding
        return r.text
    except:
        return ''

def fillUnivList(ulist,html):
    soup=BeautifulSoup(html,'html.parser')
    # 检查网页代码可以发现数据都储存在tboyd标签中,这里需要对tbody的儿子节点进行遍历
    for tr in soup.find('tbody').children:
        # 检测标签类型,如果不是bs4库支持的Tag类型,就过滤掉,这里需要先导入bs4库
        if isinstance(tr,bs4.element.Tag):
            # 解析出tr标签中的td标签后,将其储存在列表tds中
            tds=tr('td')
            # 我们需要的是排名、学校名称和总分
            ulist.append([tds[0].string,tds[1].string,tds[3].string])


def printUnivList(ulist,num):
    #定义输出模板为变量tplt,\t为横向制表符,10为每列的宽度
    tplt="{0:^10}\t{1:{3}^10}\t{2:^10}"
    print(tplt.format('排名','学校名称','总分',chr(12288)))  #  {:^10}表示取10位居中对齐
    for i in range(num):
        u=ulist[i]
        print(tplt.format(u[0],u[1],u[2],chr(12288)))

if __name__=='__main__':
    uinfo=[]
    url='http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'
    html=getHTMLText(url)
    fillUnivList(uinfo,html)
    printUnivList(uinfo,20)  #打印20所学校的信息

结果:
    排名    	   学校名称   	    总分    
    1     	   清华大学   	   95.9   
    2     	   北京大学   	   82.6   
    3     	   浙江大学   	    80    
    4     	  上海交通大学  	   78.7   
    5     	   复旦大学   	   70.9   
    6     	   南京大学   	   66.1   
    7     	 中国科学技术大学 	   65.5   
    8     	 哈尔滨工业大学  	   63.5   
    9     	  华中科技大学  	   62.9   
    10    	   中山大学   	   62.1   
    11    	   东南大学   	   61.4   
    12    	   天津大学   	   60.8   
    13    	   同济大学   	   59.8   
    14    	 北京航空航天大学 	   59.6   
    15    	   四川大学   	   59.4   
    16    	   武汉大学   	   59.1   
    17    	  西安交通大学  	   58.9   
    18    	   南开大学   	   58.3   
    19    	  大连理工大学  	   56.9   
    20    	   山东大学   	   56.3   

猜你喜欢

转载自blog.csdn.net/xiaolangmin/article/details/88748988