python網路爬蟲與資訊提取——5.資訊組織與提取方法

來源:互聯網
上載者:User

標籤: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.中國大學排名爬蟲執行個體

  1. #CrawUnivRankingB.py
  2. import requests
  3. from bs4 import BeautifulSoup
  4. import bs4
  5.  
  6. def getHTMLText(url):
  7.     try:
  8.         r = requests.get(url, timeout=30)
  9.         r.raise_for_status()
  10.         r.encoding = r.apparent_encoding
  11.         return r.text
  12.     except:
  13.         return ""
  14.  
  15. def fillUnivList(ulist, html):
  16.     soup = BeautifulSoup(html, "html.parser")
  17.     for tr in soup.find(‘tbody‘).children:
  18.         if isinstance(tr, bs4.element.Tag):
  19.             tds = tr(‘td‘)
  20.             ulist.append([tds[0].string, tds[1].string, tds[3].string])
  21.  
  22. def printUnivList(ulist, num):
  23.     tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
  24.     print(tplt.format("排名","學校名稱","總分",chr(12288)))
  25.     for i in range(num):
  26.         u=ulist[i]
  27.         print(tplt.format(u[0],u[1],u[2],chr(12288)))
  28.      
  29. def main():
  30.     uinfo = []
  31.     url = ‘https://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html‘
  32.     html = getHTMLText(url)
  33.     fillUnivList(uinfo, html)
  34.     printUnivList(uinfo, 20) # 20 univs
  35. main()

 

python網路爬蟲與資訊提取——5.資訊組織與提取方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.