[笔记]python网络爬虫:一个简单的定向爬取大学排名信息示例

爬取的网站信息

网站地址
中国大学排行榜:http://www.eol.cn/html/ky/16phb/
爬取内容
爬取该网站的综合排行榜单:
这里写图片描述
网页对应的源代码

  <div 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-10</p></a>
        <a class="tabs_zhb"><p>11-20</p></a>
        <a class="tabs_zhb"><p>21-30</p></a>
        <a class="tabs_zhb"><p>31-40</p></a>
        <a class="tabs_zhb"><p>41-50</p></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>1</td>
              <td><a href="http://souky.eol.cn/HomePage/index_147.html">北京大学</a></td>
              <td>综合</td>
              <td>北京</td>
              <td>100.00</td>
              <td>中国研究型</td>
              <td>7星级</td>
              <td>世界知名高水平大学</td> 
            </tr>
            <tr class="c2">
              <td>2</td>
              <td><a href="http://souky.eol.cn/HomePage/index_5.html">清华大学</a></td>
              <td>理工</td>
              <td>北京</td>
              <td>98.50 </td>
              <td>中国研究型</td>
              <td>7星级</td>
              <td>世界知名高水平大学</td>
            </tr>
            <tr>
              <td>3</td>
              <td><a href="http://souky.eol.cn/HomePage/index_254.html">复旦大学</a></td>
              <td>综合</td>
              <td>上海 </td>
              <td>82.79 </td>
              <td>中国研究型</td>
              <td>6星级</td>
              <td>中国顶尖大学</td>
            </tr>

从网页源代码中可以看到,需要的信息位于<div class="conBox zhb" id="Tabs_zhb">标签的子孙代标签中的<tr>标签下的各个<td>标签中,因此写下如下代码爬取,存储并打印出相关信息:

爬取代码编写:

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')
    #寻找标签<div class="conBox zhb" id="Tabs_zhb">
    table=item[0].find_all('table')
    #寻找上个标签下的<table>标签
    for item1 in table:
        tr=item1.find_all('tr')
        #寻找<table>标签下的各个<tr>标签
        for item in tr[1:]:
        #去掉第一个<tr>标签,从第二个开始遍历
            aim=item.contents
            #<tr>标签下的内容,也就是各个<td>标签
            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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值