資訊標記與資訊提取
1.資訊標記的三種形式
標記後的資訊可形成資訊組織結構增加了資訊維度
標記後的資訊可用於通訊、儲存或展示
標記的結構與資訊一樣具有重要價值
標記後的資訊更利於程式理解和運用
三種形式:XML、JSON、YAML
2.HTML的資訊標記
H:hyper
T:text
M:markup
L:language
3.三種資訊標記形式的比較
XML:最早的通用資訊標記語言,可擴充套件性好,但繁瑣
JSON:資訊有型別,適合程式處理(js),較XML簡潔
YAML:資訊無型別,文字資訊比例高,可讀性好
4.資訊提取的一般方法
方法一:完整解析 資訊的標記形式,再提取關鍵資訊
需要標記解析器 例如:
優點:資訊解析準確
缺點:提取過程繁瑣,速度慢
方法二:無視標記形式,直接搜尋關鍵資訊
對資訊的文字查詢函式即可
優點:提取過程簡潔,速度較快
缺點:提取結果準確性欲資訊內容相關
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()