Python定向爬取单网页中国大学排名(一)

Python定向爬取单网页中国大学排名(一)

爬取步骤

1.通过requests.get()函数得到网页html格式所有内容;
2.将爬取到的网页内容通过BeautifulSoup()类进行网页解析,遍历网页提取我们需要的内容放入数据结构(这里我们采用list列表存储);
3.将列表信息打印出来。

代码解析

import requests
from bs4 import BeautifulSoup
import re
import bs4
#针对三个步骤,构建了三个函数
#首先爬取网页信息,url为要爬取的网页链接
def getHTMLText(url):
	try: #采用try,except异常处理格式
		r = requests.get(url,timeout = 30) #获取网页信息,设置超时时间为30秒,超过则会进入异常处理
		r.raise_for_status() #判断是否成功接收到网页响应,成功会返回200;不成功会返回403或者405等
		r.encoding = r.apparent_encoding #将编码格式默认一般为utf-8,方便显示中文
		return r.text #函数返回网页信息
	except:
		print('获取网页内容异常!')
#将获取到的网页信息进行解析,提取所需要的信息,存入数据结构中(这里为列表)
def HTML2list(html,list):
	soup = BeautifulSoup(html,'html.parser') #调用BeautifulSoup类,采用html解析器
	#查看网页源码可知,排名信息在tbody标签中,tr标签中包含一所学校,td标签为所需要信息
	#遍历tbody标签中子标签tr
	for tr in soup.find('tbody').children:
		if isinstance(tr,bs4.element.Tag): ## 判断子节点是否为Tag对象(因为子节点会包含如换行符之类的节点)
			tds = tr.find_all('td') #找到所有td标签,返回td标签列表
			list.append([tds[0].string,tds[1].string,tds[2].string]) #获取排名,大学名,地方信息
#打印列表信息
def printlist(list,num): #num为大学排名个数
	print('{:^10}{:^6}{:^10}'.format('排名','学校','分数')) 
	for i in range(num):
		u = list[i]
		print('{:^10}{:^6}{:^10}'.format(u[0],u[1],u[2]))
def main():
	list = []
	url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2018.html'
	html = getHTMLText(url)
	HTML2list(html,list)
	printlist(list,20)
if __name__ == '__main__':
	main()

运行结果

 排名      学校      分数
    1      清华大学     北京
    2      北京大学     北京
    3      浙江大学     浙江
    4     上海交通大学    上海
    5      复旦大学     上海
    6     中国科学技术大学    安徽
    7      南京大学     江苏
    8     华中科技大学    湖北
    9      中山大学     广东
    10    哈尔滨工业大学   黑龙江
    11     同济大学     上海
    12     武汉大学     湖北
    13     东南大学     江苏
    14    西安交通大学    陕西
    15    北京航空航天大学    北京
    16     南开大学     天津
    17     四川大学     四川
    18     天津大学     天津
    19    华南理工大学    广东
    20    北京师范大学    北京

虽然打印出我们想要的信息,但是打印格式有些问题,没有对齐,下一节对其进行优化显示。

猜你喜欢

转载自blog.csdn.net/weixin_39549161/article/details/86533131