20190225----大学排名

import requests
from bs4 import BeautifulSoup
import bs4

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

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')    #tr.find_all('td')的简写
			ulist.append([tds[0].string, tds[1].string, tds[2].string])

def printUniverList(ulist, num):
	print('{:^10}\t{:^6}\t{:^10}'.format('排名', '学校', '总分'))
	for i in range(num):
		u = ulist[i]
		print('{:^10}\t{:^6}\t{:^10}'.format(u[0], u[1], u[2]))
	

def main():
	uinfo = []
	url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'
	html = getHTMLText(url)
	fillUnivList(uinfo, html)
	printUniverList(uinfo, 20)

main()

其中分为三个模块:
1.从网络获取网页内容(用到requests库)

#这也是爬取网页的基本框架
def getHTMLText(url):
	try:
		r = requests.get(url, timeout = 30)
		r.raise_for_status()    #不是200直接except
		r.encoding = r.apparent_encoding
		return r.text
	except:
		return 'cuowu'

2.提取内容信息到合适的数据结构,即将内容放到一个列表中(用到bs4)

#所有的信息都封装在tbody中,然后又在里面分tr,每一个tr包含了所有的大学信息,每个tr中的信息又被td所包围
def fillUnivList(ulist, html):
	soup = BeautifulSoup(html, 'html.parser')
	for tr in soup.find('tbody').children:   #把所有的tbod以及他的子代全部遍历出来
		if isinstance(tr, bs4.element.Tag):  #判断是否为标签  因为有可能是字符串
			tds = tr('td')    #tr.find_all('td')的简写
			ulist.append([tds[0].string, tds[1].string, tds[2].string])  #.string的意思是找到该标签中的字符串属性

3.输出结果

def printUniverList(ulist, num):
	print('{:^10}\t{:^6}\t{:^10}'.format('排名', '学校', '总分'))
	for i in range(num):
		u = ulist[i]
		print('{:^10}\t{:^6}\t{:^10}'.format(u[0], u[1], u[2]))
	

4.主函数部分

def main():
	uinfo = []   #存放大学信息
	url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'
	html = getHTMLText(url)
	fillUnivList(uinfo, html)
	printUniverList(uinfo, 20)

有点瑕疵 明天改进

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值