中國大學排名定向爬蟲--解析

需要爬取的網頁:http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html

右鍵單擊 -> 查看網頁源代碼:

找到需要爬取的信息的位置:(可以Ctrl+F  搜索 "清華大學"  快速找到位置)

自詡觀察網頁源代碼可以發現:

  1. 所有的大學信息都放在了 <tbody> 標籤下 
  2. 每個大學信息都放在了對應的 <tr> 標籤下 
  3. 每個大學的每一條信息都放在了對應的 <td> 標籤中 

打開網頁:http://www.zuihaodaxue.cn/robots.txt  檢查定向爬蟲的可行性,404證明定性爬蟲沒有被限制

編寫代碼:

import requests
from bs4 import BeautifulSoup
import bs4

#爬取網頁信息代碼:
def getHTMLText(url):
    try:
        r=requests.get(url,timeout=30)#爬取信息
        r.raise_for_status()#異常識別
        r.encoding=r.apparent_encoding#修改編碼
        return r.text#返回text
    except:
        return ""#異常返回 空

#提取出html代碼中的大學信息存儲到ulist列表中
def fillUnivList(ulist,html):
    soup=BeautifulSoup(html,"html.parser")#解析 html
    for tr in soup.find('tbody').children:#遍歷tbody的孩子標籤 每個tr代表一所大學
        if isinstance(tr,bs4.element.Tag): #過濾掉非標籤類型的元素
            tds=tr('td')#等價於 tr.find_all('td')
            #存儲所有的td標籤的內容
            ulist.append([tds[0].string,tds[1].string,tds[3].string])#排名  名稱  得分(tds[3])  加入到列表中

#輸出ulist列表中前num個大學信息
def printUnivList(ulist,num):
    tplt="{0:^10}\t{1:^10}\t{2:^10}"#輸出模板變量
    print(tplt.format("排名","學校名稱","總分",chr(12288)))#print的format格式化輸出,並填充中文空格,使得界面更加美觀
    for i in range(num):
        u=ulist[i]
        print(tplt.format(u[0],u[1],u[2],chr(12288)))

#主函數
def main():
    uinfo=[]
    url="http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html"#將要爬取的url
    #調用編寫好的功能函數
    html=getHTMLText(url)
    fillUnivList(uinfo,html)
    printUnivList(uinfo,20)

main()#調用主函數

程序運行結果:

參考課程:中國大學MOOC_北京理工大學_Python網絡爬蟲與信息提取

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章