標籤:plt request fill func rom parent 提取 text div
1.資訊標記的三種形式
(1)XML(eXtensible Markup Language)可擴充標記語音
<name> … </name>有內容的標籤
<name />無內容的標籤
<!‐‐ ‐‐>注釋
(2)JSON(JavsScript Object Notation)有類型的索引值對 key:value
“key” : “value”
“key” : [“value1”, “value2”]多值用[,]組織
“key” : {“subkey” : “subvalue”}索引值對嵌套用{,}
(3)YAML(YAML Ain’t Markup Language)無類型索引值對 key:value
縮排表達所屬關係
‐ 表達並列關係
| 表達整塊資料 # 表示注釋
key : value
key : #Comment
‐value1
‐value2
key :
subkey : subvalue
2.比較
XML
最早的通用資訊標記語言,可擴充性好,但繁瑣
Internet上的資訊互動與傳遞
JSON
資訊有類型,適合程式處理(js),較XML簡潔
行動裝置 App雲端和節點的資訊通訊,無注釋
YAML
資訊無類型,文本資訊比例最高,可讀性好
各類系統的設定檔,有注釋易讀
3.資訊提取的一般方法
方法一:完整解析資訊的標記形式,再提取關鍵資訊
優點:資訊解析準確
缺點:提取過程繁瑣,速度慢
方法二:無視標記形式,直接搜尋關鍵資訊
優點:提取過程簡潔,速度較快
缺點:提取結果準確性與資訊內容相關
融合方法:結合形式解析與搜尋方法,提取關鍵資訊
需要標記解析器及文本尋找函數
4.基於bs4庫的html內容尋找方法
<>.find_all(name, attrs, recursive, string, **kwargs)
返回一個清單類型,儲存尋找的結果
? name : 對標籤名稱的檢索字串
? attrs: 對標籤屬性值的檢索字串,可標註屬性檢索
? recursive: 是否對子孫全部檢索,預設True
? string: <>…</>中字串地區的檢索字串
<tag>(..) 等價於 <tag>.find_all(..)
soup(..) 等價於 soup.find_all(..)
擴充方法:
<>.find() 搜尋且只返回一個結果,同.find_all()參數
<>.find_parents() 在先輩節點中搜尋,返回清單類型,同.find_all()參數
<>.find_parent() 在先輩節點中返回一個結果,同.find()參數
<>.find_next_siblings() 在後續平行節點中搜尋,返回清單類型,同.find_all()參數
<>.find_next_sibling() 在後續平行節點中返回一個結果,同.find()參數
<>.find_previous_siblings() 在前序平行節點中搜尋,返回清單類型,同.find_all()參數
<>.find_previous_sibling() 在前序平行節點中返回一個結果,同.find()參數
4.中國大學排名爬蟲執行個體
- #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 = ‘https://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html‘
- html = getHTMLText(url)
- fillUnivList(uinfo, html)
- printUnivList(uinfo, 20) # 20 univs
- main()
python網路爬蟲與資訊提取——5.資訊組織與提取方法