中国大学排名定向爬虫实例

功能描述:

程序的结构设计:

网页结构:

网页代码框架:

<tbody>

       <tr>     #第一个大学

             <td>...</td>   <td>...</td>   <td>...</td>    .......

       </tr>

       .......

       .......

       <tr>     #第N个大学

             <td>...</td>   <td>...</td>   <td>...</td>    .......

       </tr>

</tbody>

爬虫代码:

import requests
from bs4 import BeautifulSoup
import bs4

def getHTMLText(url):   #输入url,返回HTML
	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):  #将HTML页面放到ulist列表中
	soup=BeautifulSoup(html,"html.parser")
	for tr in soup.find('tbody').children:
		if isinstance(tr,bs4.element.Tag):  #将tr不是Tag的标签过滤
			tds=tr('td')   #查tr中的td标签
			ulist.append([tds[0].string,tds[1].string,tds[2].string,tds[3].string])

def printUnivList(ulist,num):   #将ulist信息打印出来,num为个数
	print("{:^10}\t{:^6}\t{:^6}\t{:^10}".format("排名","学校名称","省市","总分"))  #打印表头
	for i in range(num):
		u=ulist[i]
		print("{:^10}\t{:^6}\t{:^6}\t{:^10}".format(u[0],u[1],u[2],u[3]))

if __name__=="__main__":
	uinfo=[]
	url="http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html"
	html=getHTMLText(url)
	fillUnivList(uinfo,html)
	printUnivList(uinfo,20)  #20个学校的信息

爬取结果:

输出格式优化:

上述爬取结果可以看出格式不是很好对齐,进行优化

原代码:

def printUnivList(ulist,num):   #将ulist信息打印出来,num为个数
	print("{:^10}\t{:^6}\t{:^6}\t{:^10}".format("排名","学校名称","省市","总分"))  #打印表头
	for i in range(num):
		u=ulist[i]
		print("{:^10}\t{:^6}\t{:^6}\t{:^10}".format(u[0],u[1],u[2],u[3]))

优化后代码:

def printUnivList(ulist,num):   #将ulist信息打印出来,num为个数
	tplt="{0:^10}\t{1:{4}^10}\t{2:^6}\t{3:^10}"  #{1:{4}^10}中的{4}表示用format格式中的4(即第五个)参数:chr(12288)
	print(tplt.format("排名","学校名称","省市","总分",chr(12288)))  #打印表头
	for i in range(num):
		u=ulist[i]
		print(tplt.format(u[0],u[1],u[2],u[3],chr(12288)))

优化后的结果:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值