Part 20 第二周內(nèi)容導(dǎo)學
我們繼續(xù)學習python網(wǎng)絡(luò)爬蟲與信息提取課程。上一周我們講解了python的request庫,學習了自動爬取HTML頁面和自動向網(wǎng)絡(luò)提及請求的方法、講解了robots協(xié)議、以及5個實戰(zhàn)的網(wǎng)絡(luò)爬取例子。
本周我們將繼續(xù)講解如何解析HTML頁面的基本方法。我們講解一個python語言里一個非常優(yōu)秀的第三方庫Beautiful Soup以及介紹信息標記和提取的一般方法,最后給出中國大學排名定向爬蟲這樣一個實例。通過這個實例我們將結(jié)合erquest庫和Beautiful Soup庫講解從網(wǎng)絡(luò)中獲取信息并提取信息的基本方法。

Part 21 Beautiful Soup庫的安裝
下面我們介紹Beautiful Soup庫的安裝。Beautiful Soup也叫美味湯,它是一個非常優(yōu)秀的python第三方庫,他能夠?qū)TML、SML格式進行解析并且提取其中的相關(guān)信息。在Beautiful Soup的網(wǎng)站上有這樣一段話:Beautiful Soup可以對你提供你給他的任何格式進行相關(guān)的爬取,并且可以進行樹形解析,這個我們再進行詳細介紹。Beautiful Soup的使用原理是它能夠把你給他的任何文檔當作一鍋湯,然后給你煲制這鍋湯。

下面我們來安裝一下Beautiful Soup庫:
首先我們要用管理員權(quán)限啟動command命令臺,

然后我們在命令臺上執(zhí)行pip install Beautiful Soup4,

我們看到庫已經(jīng)下載安裝成功。安裝之后我么對Beautiful Soup庫來個小測,這里面我們使用一個HTML頁面地址是
http://python123.io/ws/demo.html

我們用瀏覽器先打開這個網(wǎng)站看一下:在這個頁面中我們看到他有一個標題欄,標題欄上面有一行字叫This is a python demo,這個地方表示的是一個title信息。我們可以將這個文件存取下來,存取成demo.html?;蛘呶覀冇盟脑创a。

我們打開他的源代碼,能看到這個頁面對應(yīng)的是一個HTML.5.0格式的頁面,在這個代碼中我們看到了很多的標簽,這種標簽以一對、尖括號來表示,如果同學們現(xiàn)在看不太懂這樣的內(nèi)容沒有關(guān)系,大家記住這個HTML頁面是以尖括號為主的標簽所封裝的信息就可以了。

那么,如何獲得這樣的源代碼呢?我們有兩種方式:
第一種,我們可以手工獲得HTML的代碼,首先我們打開瀏覽器找到剛才的這個頁面,

然后我們右鍵點擊“查看源代碼”:

在任何一個瀏覽器上都有這樣的一個功能,之后我們就能看到這個頁面的源代碼了,

我們可以將這個頁面的源代碼拷貝下來,并且放到我們的程序里,另外我們上周已經(jīng)學過了request庫,我們可以用request庫來自動的獲取這個來鏈接對應(yīng)的源代碼。
下面我們看一下,我們輸入import requests,然后我們用get函數(shù)來獲得這個鏈接所對應(yīng)的內(nèi)容,然后我們顯示一下這個文本,我們這個時候看到的就是HTML頁面的相關(guān)內(nèi)容。

為了簡化我們可以定義一個變量叫demo,表示這個頁面的所有代碼內(nèi)容。我們給出demo = r.text,后面我們將頻繁地使用demo這個變量,請同學們把這段代碼看清楚。

下面我們對Beautiful Soup安裝進行一個小測。首先我們要導(dǎo)入Beautiful Soup庫,我們輸入from bs4 import BeautifulSoup4。這里面很有趣,盡管我們安裝這個庫的時候,我們安裝的是Beautiful Soup4,但是我們在使用的時候我們用他的簡寫bs4,所以我們from bs4這個庫的時候我們導(dǎo)入了一個類叫BeautifulSoup。

那下面我們來開始做這鍋湯,也就是把這個demo的頁面熬制成一個Beautiful Soup能夠理解的湯,我們用一個變量叫soup,這里面需要大家注意:我們除了給出demo,同時還要給出解析demo的解釋器,這里面我們使用的是html.parser,也就是說我們是對demo進行HTML解析。
那下面我們看看我們的解析是否正確呢?也就是說我們看一下我們安裝的庫是否正確。我們用print語句將我們做的這鍋湯打印出來。我們輸入print(soup.prettify()),好我們看到這個頁面相關(guān)輸出了,那說明我們Beautiful Soup庫成功的解析了我們給出的demo頁面。

那么,怎么使用Beautiful Soup庫呢?簡單來說,只需要兩行代碼:

第一行:from bs4 import BeautifulSoup。這里面的BeautifulSoup是一個類,大家記住B和S要大寫。
第二行:然后呢,我們需要做一鍋湯,那這鍋湯呢,我們用一個變量叫soup。當然我們可以用其他的變量,soup = BeautifulSoup()這個類型有兩個參數(shù),第一個參數(shù)我們需要BeautifulSoup解析的html格式的信息,我們可以用<p>data來做個代替,我們也可以用任何的變量,同時我們給出一個解析這鍋湯時用的解析器,我們這里使用html.parser。只要兩行代碼我們就可以看到html和sml的信息,是不是很簡單呢?
Part 23 Beautiful Soup庫的基本元素
下面我們介紹一下BeautifulSoup庫的基本元素。理解這些基本元素,是使用BeautifulSoup庫的基礎(chǔ)。我們知道BeautifulSoup庫是能夠解析html和sml文件的功能庫。那么我們該怎么理解他呢?

我們以HTML文件為例,任何一個html文件,如果打開他的源代碼,我們都能看到它是由一組尖括號構(gòu)成的標簽組織起來的。這里邊每一對尖括號形成了一個標簽,而標簽之間存在一個上下游關(guān)系,形成了一個標簽樹。所以我們可以說Beautiful Soup庫是解析、遍歷、維護“標簽樹”的功能庫。只要你提供的文件是標簽類型那么Beautiful Soup庫都可以對它做很好的解析。
那么我們再看一下每個標簽的具體格式:這里面我們以p標簽為例:
p標簽是以一對尖括號形成的一個標簽類型,他的name 是p。那么這里面有一對尖括號和帶有一個/的尖括號之間形成的就是一個標簽對,英文叫Tag。那么其中的第一個尖括號中的第一個單詞p就是這個標簽的名稱,我們叫name,一般這個標簽名稱是成對出現(xiàn)的,那么在最開始和最后都出現(xiàn)標明這一個標簽的范圍。那么在第一對尖括號中除了名字之外,存在這一個相關(guān)的域,這個域叫屬性域,這里面包含0個或多個屬性,那這個屬性呢是用來定義這個標簽的特點。這里面我們看到一個屬性,他叫class,屬性的內(nèi)容是title。那么任何一個屬性有它屬性的特性和它的值,所以我們叫屬性是由鍵和值,就是鍵值對構(gòu)成的。這樣的一個格式構(gòu)成了標簽的基本結(jié)構(gòu)。

我們說Beautiful Soup庫,也叫beautifulsoup4庫或bs4。我們在使用他的時候,需要采用一些引用方式。目前我們最常用的引用方式是from bs4 import BeautifulSoup,這個引用方式說明我們從bs4庫中引入了一個類型,這個類型叫BeautifulSoup,這里面還要提醒大家:BeautifulSoup中的B和S要大寫。因為python是一個大小寫敏感的語言

除了這樣的約定引用方式之外,如果我們需要對BeautifulSoup庫里面的一些基本的變量進行判斷的時候,我們也可以直接引用BeautifulSoup庫,使用的是import bs4。那么如何理解BeautifulSoup這個類呢?我們想說BeautifulSoup庫本身解析的是html和sml的文檔,那么這個文檔和標簽樹是一一對應(yīng)的。 那么經(jīng)過了BeautifulSoup庫的處理,我們可以使得每一個標簽樹,大家可以理解為標簽樹就是一個字符串,我們將這個標簽樹轉(zhuǎn)換成一個BeautifulSoup類,那么BeautifulSoup類就是能夠代表標簽樹的類型。

事實上,我們認為html文檔、標簽樹、和BeautifulSoup類這三者是等價的。在這個等價的基礎(chǔ)上,我們就可以通過BeautifulSoup類使得標簽樹形成了一個變量,而對這個變量的處理就是對標簽樹的相關(guān)的處理。

這里面我們可以使用幾行代碼,首先我們from bs4 import BeautifulSoup這個類型,然后可以定義一個變量soup,它等于BeautifulSoup,然后我們給出一個html代碼,并且指定它的解析器是html.parser,同時我們也可以通過打開文件的方式來對BeautifulSoup類提供html或sml的文檔內(nèi)容。

簡單講我么可以把內(nèi)容BeautifulSoup類當作對應(yīng)HTML/XML文檔的全部內(nèi)容。
之前的例子我們使用了HTML解析器。那么除了HTML解析器,BeautifulSoup庫也可以使用四種其他的解析器:

第一種就是我們之前使用過的BeautifulSoup提供的HTML解析器,我們在輸入?yún)?shù)的時候輸入html.parser,它的使用條件是:只要我們安裝了BeautifulSoup庫就可以使用。
第二種:接下來我們可以使用lxml的HTML解析器,那我們在使用的時候輸入的是lxml這樣的一個解析器的標識。為了使用這樣的解析器,我們需要在命令行中使用pip install 去安裝一個lxml這樣的一個庫,才能使用這個解析器。
第三種:此外lxml也提供XML解析器,也同樣是安裝lxml庫就可以使用。
第四種:另外還有一個庫,叫第三方庫叫html5lib。我們可以通過pip install html5lib去安裝這樣的一個解析器。
事實上,無論哪種解析器他都可以有效的解析html和sml文檔的。這里面呢,我們主要使用html解析器,如果大家處理xml文檔,或者希望獲得更快的性能或者非常準確的xml解析的格式和信息的話,可以使用其他的解析器。
下面我們介紹一下BeautifulSoup類的基本元素:

BeautifulSoup類一共有5種基本元素:
第一種:就是我們之前介紹過的,并且使用過的Tag標簽。標簽是BeautifulSoup類里面的最基本的信息組織單元,他與html和xml文檔中的一對尖括號相對應(yīng),它分別是用尖括號和尖括號中帶/來標明開頭和結(jié)尾。
第二種:標簽中有名字,也構(gòu)成了基本元素叫name。那么我們可以用標簽.name來獲取標簽的名字。除了名字之外,標簽有屬性,它是以字典形式組織的這樣一個類型。我們可以用標簽.attrs來獲得屬性的信息。
第三種:此外在標簽和尖括號之間,也就是我們所說的省略號的部分。實際上它是一種字符串,我們可以用標簽.string來
未待完續(xù)。。。。。。