网站地址
中国大学排行榜:http://www.eol.cn/html/ky/16phb/
爬取内容
爬取该网站的综合排行榜单:
网页对应的源代码
class="section"><a id="zhb" name="zhb">a>
<div class="title t2"><h1><img src="images/title2.png" alt="综合榜" />h1>div>
<div class="conBox zhb" id="Tabs_zhb">
<div class="tabNav clearfix">
<a class="tabs_zhb"><p>1-10p>a>
<a class="tabs_zhb"><p>11-20p>a>
<a class="tabs_zhb"><p>21-30p>a>
<a class="tabs_zhb"><p>31-40p>a>
<a class="tabs_zhb"><p>41-50p>a>
div>
<div class="tabCon">
<div class="zhbCon tabBox table2">
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<th width="5%">名次th>
<th width="25%">学校名称th>
<th width="8%">类型th>
<th width="8%">所在地区th>
<th width="8%">总分th>
<th width="13%">办学类型th>
<th width="8%">星级排名th>
<th width="15%">办学层次th>
tr>
<tr>
<td>1td>
<td><a href="http://souky.eol.cn/HomePage/index_147.html">北京大学
综合
北京
100.00
中国研究型
7星级
世界知名高水平大学
">
2
">清华大学
理工
北京
98.50
中国研究型
7星级
世界知名高水平大学
3
">复旦大学
综合
上海
82.79
中国研究型
6星级
中国顶尖大学
从网页源代码中可以看到,需要的信息位于标签的子孙代标签中的标签下的各个标签中,因此写下如下代码爬取,存储并打印出相关信息:
爬取代码编写:
import requests
from bs4 import BeautifulSoup
#从网络上获取大学排名网页的内容
def getHTMLtext(url):
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):
soup=BeautifulSoup(html, 'html.parser')
item=soup.find_all(id='Tabs_zhb', class_='conBox zhb')
#寻找标签
table=item[0].find_all('table')
#寻找上个标签下的标签
for item1 in table:
tr=item1.find_all('tr')
#寻找标签下的各个标签
for item in tr[1:]:
#去掉第一个标签,从第二个开始遍历
aim=item.contents
#标签下的内容,也就是各个标签
if len(aim)>10:
ulist.append([aim[1].string,
aim[3].find_all('a')[0].string,
aim[9].string])
#利用数据结构展示输出结构
def printUnivList(ulist, num):
tplt='{0:^10}\t{1:{3}^10}\t{2:^10}'
#输出的结构布置
print(tplt.format('大学综合排名', '学校所在地', '总得分', chr(12288)))
#chr(12288)是中文空格填充字符
for i in range(num):
u=ulist[i]
print(tplt.format(u[0], u[1], u[2], chr(12288)))
def main():
unifo=[]
url='http://www.eol.cn/html/ky/16phb/'
html=getHTMLtext(url)
fillUnivList(unifo, html)
printUnivList(unifo, 40)#只列出40所学校的信息
main()
运行结果:
大学综合排名 学校所在地 总得分
1 北京大学 100.00
2 清华大学 98.50
3 复旦大学 82.79
4 武汉大学 82.43
5 浙江大学 82.38
6 中国人民大学 81.98
7 上海交通大学 81.76
8 南京大学 80.43
9 国防科学技术大学 80.31
10 中山大学 76.46
11 吉林大学 76.01
12 中国科学技术大学 75.14
13 华中科技大学 75.12
14 四川大学 74.99
15 北京师范大学 74.75
16 南开大学 74.46
17 西安交通大学 73.56
18 中南大学 73.13
19 同济大学 72.85
20 天津大学 72.81
21 哈尔滨工业大学 72.72
21 山东大学 72.72
23 厦门大学 72.23
24 东南大学 71.35
25 北京航空航天大学 70.58
26 东北大学 69.55
27 重庆大学 69.54
28 华东师范大学 69.52
29 大连理工大学 68.84
30 北京理工大学 68.72
31 华南理工大学 68.47
32 中国农业大学 68.05
33 湖南大学 68.03
34 华中师范大学 67.92
35 西北工业大学 67.77
36 兰州大学 67.21
37 电子科技大学 66.88
38 武汉理工大学 66.60
39 中国地质大学 66.56
40 东北师范大学 66.50
该示例参考大学mooc课程《python网络爬虫和信息提取》
(http://www.icourse163.org/course/BIT-1001870001)