使用python的requests和BeautifulSoup爬取前20个中国最好的大学,内容来源于最好大学这个网站,不需要登陆,直接可以访问静态网页内容,网页如下:
直接可以提取信息,非常适合练习requests和BeautifulSoup功能.
主程序需要几个部分组成
首先载入必要的包
import requests
from bs4 import BeautifulSoup
import bs4
getHTMLText函数:访问网页,得到html信息到本地,方便下一步的处理
def getHTMLText(url):
try:
r = requests.get(url, timeout = 30)
r.raise_for_status()#返回状态.200为正常,如果有问题,这里可以显示出问题所在
r.encoding = r.apparent_encoding#分析内容编码方式,防止出现乱码
return r.text
except:
return ''
fillUnivList函数,得到getHTMLText函数的html信息,进行内容解析,将需要的内容传送到ulist中
看网页源代码发现我们要的信息都在tbody内的 tr标签的td内,函数如下
def fillUnivList(ulist, html):
soup = BeautifulSoup(html ,'html.parser')#用parser进行解析
for tr in soup.find('tbody').children: #在tbody内部查找
if isinstance(tr,bs4.element.Tag): #筛选标签部分
tds = tr('td') #找到核心内容
ulist.append([tds[0].string, tds[1].string, tds[2].string])
return ulist
最后使用printUnivList函数进行打印
def printUnivList(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.com/zuihaodaxuepaiming2018.html'
html = getHTMLText(url)
fillUnivList( uinfo ,html)
printUnivList(uinfo, 20)
输入main()
排名 学校名称 总分
1 清华大学 北京
2 北京大学 北京
3 浙江大学 浙江
4 上海交通大学 上海
5 复旦大学 上海
6 中国科学技术大学 安徽
7 南京大学 江苏
8 华中科技大学 湖北
9 中山大学 广东
10 哈尔滨工业大学 黑龙江
11 同济大学 上海
12 武汉大学 湖北
13 东南大学 江苏
14 西安交通大学 陕西
15 北京航空航天大学 北京
16 南开大学 天津
17 四川大学 四川
18 天津大学 天津
19 华南理工大学 广东
20 北京师范大学 北京
总结:首先对url提取html信息,第二部对html信息提取关键部分,这里需要对网页源代码进行观察,找到提取信息的方法,也是代码的核心部分,最后进行打印.