Reference:
第二周:網(wǎng)絡(luò)爬蟲之提取
單元4:Beautiful Soup庫(kù)入門
4-1 Beautiful Soup庫(kù)的安裝
使用原理:能辦你給它的任何文檔當(dāng)做一鍋湯,然后煲制這鍋湯。
演示html頁(yè)面上地址:http://python123.io/ws/demo.html
如何獲得頁(yè)面的源代碼:
方法1:右鍵點(diǎn)擊查看源代碼
方法2:用request庫(kù)來自動(dòng)獲取頁(yè)面的源代碼
>>>from bs4 import BeautifulSoup
>>>
4-2 Beautiful Soup庫(kù)的基本元素
Beautiful Soup庫(kù)是解析、遍歷、維護(hù)“標(biāo)簽樹”的功能庫(kù)。只要你提供的文件是標(biāo)簽類型,那么Beautiful Soup庫(kù)都可以對(duì)它做很好的解析。
Beautiful Soup對(duì)應(yīng)一個(gè)
Beautiful Soup庫(kù)解析器:
Beautiful Soup類的基本元素:

4-3 基于bs4庫(kù)的HTML內(nèi)容遍歷方法


4-4 基于bs4庫(kù)的HTML格式化和編碼
單元5:信息組織與提取方法
5-1 ?信息標(biāo)記的三種方式
信息的標(biāo)記:
***一個(gè)信息:北京理工大學(xué)
***一組信息:
需要對(duì)信息做一定的標(biāo)記,使得我們能夠理解信息所返回的真實(shí)含義。
比如:信息標(biāo)記 ? ? ? ? ‘name’,‘北京理工大學(xué)’ ? ? ? ? ? ? 給它標(biāo)記一個(gè)name,表明它是一個(gè)名字
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?‘a(chǎn)ddr’,‘北京市海淀區(qū)中關(guān)村’ ? ?給它標(biāo)記一個(gè)address,表明它是一個(gè)地址
信息的標(biāo)記:
(1)標(biāo)記后的信息可形成信息組織結(jié)構(gòu),增加了信息維度。
(2)標(biāo)記后的信息可用于通信、存儲(chǔ)或展示。
(3)標(biāo)記的結(jié)構(gòu)與信息一樣具有重要價(jià)值。
(4) 標(biāo)記后的信息更有利于程序的理解和運(yùn)用,也更有利于人對(duì)信息的深入的認(rèn)識(shí)和理解。
HTML的信息標(biāo)記 = Hyper Text Markup Language 超文本標(biāo)記語(yǔ)言
html是www的信息組織方式。能夠?qū)⒙曇?、圖像、視頻等超文本的信息嵌入到文本當(dāng)中。
HTML的信息標(biāo)記
HTML通過預(yù)定義的<>...</>標(biāo)簽形式組織不同類型的信息。示例如圖:
信息標(biāo)記有哪些種類呢?
信息標(biāo)記的三種形式:XML,JSON和YMAL
XML = eXtensible Markup Language 擴(kuò)展標(biāo)記語(yǔ)言
是一種與HTML接近的標(biāo)記語(yǔ)言。
示例:
JSON = JavaScript Object Notation
有類型的鍵值對(duì)構(gòu)建的信息表達(dá)方式 key:value
什么是鍵值對(duì)?就是給出一個(gè)信息,并對(duì)這個(gè)信息的類型做一個(gè)定義。
比如:
在JSON類型中要注意:無論是鍵還是值都需要通過增加雙引號(hào)來表達(dá)它是字符串的形式。如果是數(shù)字,比如:1990,1911,就直接寫數(shù)字即可。這種類型反應(yīng)在鍵值對(duì)上,說明它是一個(gè)有數(shù)據(jù)類型的鍵值對(duì)。
值的部分有多個(gè)名字的時(shí)候:
鍵值對(duì)之間可以嵌套使用:
總結(jié):JSON使用有類型的鍵值對(duì)將信息組織起來
好處:
YAML=YAML Ain't Markup Language
無類型鍵值對(duì)標(biāo)記信息的表達(dá)形式
5-2? 三種信息標(biāo)記形式的比較
XML實(shí)例:
JSON實(shí)例:
YAML實(shí)例:
比較:
(1)XML 格式是最早的通用信息標(biāo)記語(yǔ)言,可擴(kuò)展性好,但繁瑣。 ?應(yīng)用:Internet上的信息交互與傳遞
(2)JSON 信息有類型,適合程序處理(js),較XML 簡(jiǎn)潔。應(yīng)用:移動(dòng)應(yīng)用云端和節(jié)點(diǎn)的信息通信(一般用在程序?qū)涌谔幚淼牡胤剑?/p>
但是JSON有一個(gè)缺點(diǎn):無注釋。
(3)YAML 信息無類型,文本信息比例最好,可讀性好。應(yīng)用:各類系統(tǒng)的配置文件,有注釋易讀。因?yàn)榧冗m合人類閱讀,又適合程序分析。
5-3 ?信息提取的一般方法
信息提取指從標(biāo)記后的信息中提取所關(guān)注的內(nèi)容。
無論哪種形式,都包含“信息”和“標(biāo)記”兩部分。
信息提取的一般方法:
方法一:完整解析信息的標(biāo)記形式,再提取關(guān)鍵信息。
XML JSON YMAL 需要標(biāo)記解析器 例如:bs4庫(kù)的標(biāo)簽樹遍歷
優(yōu)點(diǎn):信息解析準(zhǔn)確?
缺點(diǎn):提取過程繁瑣,速度慢,需要對(duì)整個(gè)文本的信息組織形式有清楚的理解。
方法二:無視標(biāo)記形式,直接搜索獲取關(guān)鍵信息。
搜索 對(duì)信息的文本查找函數(shù)即可
優(yōu)點(diǎn):提取過程簡(jiǎn)潔,速度較快。
缺點(diǎn):提取結(jié)果準(zhǔn)確性與信息內(nèi)容相關(guān)。
融合方法:結(jié)合形式解析與搜索方法,提取關(guān)鍵信息。
XML JSON YAML 搜索 ---》需要標(biāo)記解析器及文本查找函數(shù)
實(shí)例:提取HTML中所有URL鏈接
思路:(1)搜索到所有的<a>標(biāo)簽
(2)解析<a>標(biāo)簽格式,提取href后的鏈接內(nèi)容
<>.find_all(name,attrs,recursive,string,)
擴(kuò)展方法
5-4 基于bs4庫(kù)的HTML內(nèi)容查找方法
單元6:實(shí)例1:中國(guó)大學(xué)排名爬蟲
最好大學(xué)網(wǎng):http://zuihaodaxue.cn/zuihaodaxuepaiming2016.html
功能描述:
輸入:大學(xué)排名URL鏈接
輸出:大學(xué)排名信息的屏幕輸出(排名,大學(xué)名稱,總分)
技術(shù)路線:requests-bs4
定向爬蟲:僅對(duì)輸入U(xiǎn)RL進(jìn)行爬取,不擴(kuò)展爬取。
(PS:從一個(gè)URL爬取其他更多的URL信息,這個(gè)就不是定向爬蟲了)
STEP1.?查看信息是否寫在html代碼中?還是動(dòng)態(tài)生成的?
STEP2.?查看該網(wǎng)站是否提供了robots的協(xié)定
程序的結(jié)構(gòu)設(shè)計(jì)
步驟1:從網(wǎng)絡(luò)上獲取大學(xué)排名網(wǎng)頁(yè)內(nèi)容 getHTMLText()
步驟2:提取網(wǎng)頁(yè)內(nèi)容中信息到合適的數(shù)據(jù)結(jié)構(gòu) fillUnivList()
步驟3:利用數(shù)據(jù)結(jié)構(gòu)展示并輸出結(jié)果printUnivList()