python爬虫——9102年中国大学定向排名

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42596724/article/details/87365086

功能

输入:大学排名URL链接
输出:大学排名的信息(排名,大学名称,总分)

可行性

robost.txt协议

键入http://zhuihaodaxue.com/robots.txt
在这里插入图片描述
即对爬虫无限制

查看网页源代码

在这里插入图片描述
结构:
排名部分的结构

< tbody>
		<tr>
				<td>...</td>
				<td>...</td>
				...
		</tr>
		<tr>
				<td>...</td>
				<td>...</td>
				...
		</tr>
		...
</tbody>

所以需要构造循环遍历tr,并将tr及其td保存为二维数组
因此需要:

ulist=[]
for tr in soup.find("tbody").children:
	if isinstance(tr,bs4.element.Tag):		#对不是Tag标签的tr进行剔除
		tds=tr("td")						#对一个大学的相关数据保存
		ulist.append([tds[0].string, tds[1].string, tds[3].string])		#将需要的数据进行提取tds[3]为得分				

关于isintance()函数的使用可以按如下来简单理解:

>>>a = 2
>>> isinstance (a,int)
True
>>> isinstance (a,str)
False

函数

getHTMLText()——输入url,返回html

fillUnivList()——输入ulist,html对ulist操作

printUnivList()——输入ulist,num,并打印(注意格式)

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")
    for tr in soup.find("tbody").children:
        if isinstance(tr,bs4.element.Tag):
            tds=tr("td")
            ulist.append([tds[0].string,tds[1].string,tds[3].string])

def printUnivList(ulist,num):
    print("{0:^10}\t{1:{3}^10}\t{2:^10}".format("排名","学校","得分",chr(12288)))
    for i in range(num):
        print("{0:^10}\t{1:{3}^10}\t{2:^10}".format(\
            ulist[i][0],ulist[i][1],ulist[i][2],chr(12288)))
def main():
    url="http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html"
    ulist=[]
    html=getHTMLText(url)
    fillUnivList(ulist,html)
    printUnivList(ulist,20)

main()

输出结果:

   排名    	    学校    	    得分    
    1     	   清华大学   	   94.6   
    2     	   北京大学   	   76.5   
    3     	   浙江大学   	   72.9   
    4     	  上海交通大学  	   72.1   
    5     	   复旦大学   	   65.6   
    6     	 中国科学技术大学 	   60.9   
    7     	  华中科技大学  	   58.9   
    7     	   南京大学   	   58.9   
    9     	   中山大学   	   58.2   
    10    	 哈尔滨工业大学  	   56.7   
    11    	 北京航空航天大学 	   56.3   
    12    	   武汉大学   	   56.2   
    13    	   同济大学   	   55.7   #果然我校录取分录取分高而排名不高
    14    	  西安交通大学  	   55.0   
    15    	   四川大学   	   54.4   
    16    	  北京理工大学  	   54.0   
    17    	   东南大学   	   53.6   
    18    	   南开大学   	   52.8   
    19    	   天津大学   	   52.3   
    20    	  华南理工大学  	   52.0   
>>> 

其中使用chr(12288)填充是为了输出时美观

展开阅读全文

没有更多推荐了,返回首页