中国部分大学排名爬虫

目标网站:http://www.zuihaodaxue.com/zuihaodaxuepaiming2016.html

目的:爬取目标网站上中国大学的排名

代码如下:

 1 import requests#引入requests库
 2 from bs4 import BeautifulSoup
 3 import bs4#引入bs4库
 4 def getHTMLText(url):#获得网页内容的函数
 5     try:
 6         r=requests.get(url,timeout=30)#得到网页内容
 7         r.raise_for_status()#来产生异常信息,在方法内部判断r.status_code是否等于200,不需要增加额外的if语句,该语句便于利用try-except进行异常处理
 8         r.encoding=r.apparent_encoding#修改编码
 9         return r.text#返回文本类
10     except:
11         return ""
12     
13 def fillUnivList(ulist,html):#将页面放到一个列表中的函数
14     soup = BeautifulSoup(html,"html.parser")#煲汤....
15     for tr in soup.find('tbody').children:#遍历查找tbody标签
16         if isinstance(tr,bs4.element.Tag):#类型判断,如果不是tag类型,将被过滤
17             tds = tr('td')#将td标签存为一个列表类型tds
18             ulist.append([tds[0].string,tds[1].string,tds[2].string])#增加对应字段
19             
20 
21 def printUnivList(ulist,num):#输出打印函数,格式化输出
22     print("{:^10}\t{:^6}\t{:^10}".format("排名","学校名称","总分"))#打印表头
23     for i in range(num):#采用循环实现
24         u= ulist[i]
25         print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))
26 
27 def writetxt(ulist,num):#储存到txt文件,E盘下自动生成中国大学排名的txt文件
28     with open('E:中国大学排名.txt','a',encoding='utf-8') as f:
29         for i in range(num):
30             u= ulist[i]
31             f.write("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))
32             f.write('\n')
33     f.close()
34 
35        
36 def main():#主函数
37    uinfo = []#列表
38    url = 'http://www.zuihaodaxue.com/zuihaodaxuepaiming2016.html'#给定链接
39    html=getHTMLText(url)
40    fillUnivList(uinfo,html)
41    printUnivList(uinfo,310)
42    writetxt(uinfo,310)
43 main()

结果如下:

第一次写的爬虫,留作纪念

posted @ 2018-02-10 15:19  西*风  阅读(255)  评论(0编辑  收藏  举报