1. 程式人生 > >資訊標記與資訊提取

資訊標記與資訊提取

1.資訊標記的三種形式

標記後的資訊可形成資訊組織結構增加了資訊維度

標記後的資訊可用於通訊、儲存或展示

標記的結構與資訊一樣具有重要價值

標記後的資訊更利於程式理解和運用

三種形式:XML、JSON、YAML

2.HTML的資訊標記

H:hyper

T:text

M:markup

L:language

3.三種資訊標記形式的比較

XML:最早的通用資訊標記語言,可擴充套件性好,但繁瑣

JSON:資訊有型別,適合程式處理(js),較XML簡潔

YAML:資訊無型別,文字資訊比例高,可讀性好

4.資訊提取的一般方法

方法一:完整解析 資訊的標記形式,再提取關鍵資訊

需要標記解析器 例如:

bs4庫的標籤樹遍歷

優點:資訊解析準確

缺點:提取過程繁瑣,速度慢

方法二:無視標記形式,直接搜尋關鍵資訊

對資訊的文字查詢函式即可

優點:提取過程簡潔,速度較快

缺點:提取結果準確性欲資訊內容相關

5.例項

提取HTML中所有URL連結

思路:(1)搜尋到所有<a>標籤

2)解析<a>標籤格式,提取href後的連結內容

<>.find_all(name,attrs,recursive,string,**kwargs)

返回一個列表型別,儲存查詢的結果

name:對標籤名稱的檢索字串

attrs:對標籤屬性值的檢索字串,可標註屬性檢索

recursive:是否對子孫全部檢索,預設為True

string:<>...</>中字串區域的檢索字串

6中國大學排名定向爬蟲

功能描述

輸入:大學排名的URL連線

輸出:大學排名資訊的螢幕輸出(排名,大學名稱,總分)

技術路線:requests-bs4

定向爬蟲:僅對輸入URL進行爬取,不擴充套件爬取

步驟1:從網路上獲取大學排名網頁內容

getHTMLText()

步驟2:提取網頁內容中資訊到合適的資料結構

fillUnivList()

步驟3:利用資料結構展示並輸出結果

printUnivList()

#CrawUnivRankingB.py
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
    except:
        return ""
 
def fillUnivList(ulist, html):
    soup = BeautifulSoup(html, "html.parser")
    for tr in soup.find('tbody').children:
        if isinstance(tr, bs4.element.Tag):
            tds = tr('td')
            ulist.append([tds[0].string, tds[1].string, tds[3].string])
 
def printUnivList(ulist, num):
    tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
    print(tplt.format("排名","學校名稱","總分",chr(12288)))
    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'
    html = getHTMLText(url)
    fillUnivList(uinfo, html)
    printUnivList(uinfo, 20) # 20 univs
main()