一. BeautifulSoup簡(jiǎn)介
通過(guò)BeautifulSoup可以方便的獲取結(jié)構(gòu)化的數(shù)據(jù)隆敢。
1.get_text()方法
2.BeautifulSoup的find()和findAll()方法
3.其它BeautifulSoup對(duì)象
4.導(dǎo)航樹(shù)
1. get_text()方法
在獲取到BeautifulSoup對(duì)象后,調(diào)用其.get_text()會(huì)把該對(duì)象里面的所有標(biāo)簽都全部去掉,以文本字符串的形式返回里面的內(nèi)容发皿。
2. BeautifulSoup的find()和findAll()方法
findAll(tag,attribute,recursive,text,limit,keywords)
(1)標(biāo)簽參數(shù)tag可以是一個(gè)標(biāo)簽的名稱也可以是一個(gè)列表例如查找一個(gè)html中的所有標(biāo)題標(biāo)簽.findAll(['h1','h2','h3','h4','h5']).findAll('h1')
(2)屬性參數(shù)attributes是用一個(gè)字典封裝一個(gè)標(biāo)簽的若干屬性和對(duì)應(yīng)的屬性值。返回HTML文檔中里所有的紅色與綠色標(biāo)簽.findAll("span",{"class":["green","red"]})
(3)遞歸參數(shù)recursive是一個(gè)布爾變量拂蝎。True會(huì)查找所有的后代標(biāo)簽False只查找子標(biāo)簽
(4)文本參數(shù)text是對(duì)標(biāo)簽里面的文本內(nèi)容做匹配穴墅。
例如查找標(biāo)簽中the prince的標(biāo)簽數(shù)量nameList=obj.findAll(text="the prince")printlen(nameList)(5)限制參數(shù)limit當(dāng)指定limit=1,便是find()方法.只返回第一個(gè)查找到的對(duì)象(6)關(guān)鍵字參數(shù)keywords如bsObj.findAll(id="text")返回id為text的對(duì)象,由于屬性關(guān)鍵字可以完全是實(shí)現(xiàn)其功能所以不推薦使用該參數(shù),且有時(shí)使用該參數(shù)時(shí)會(huì)發(fā)生奇怪的錯(cuò)誤。
3. 其它BeautifulSoup對(duì)象
NavigableString對(duì)象用來(lái)表示標(biāo)簽里的文字而非標(biāo)簽Comment對(duì)象用來(lái)表示HTML文檔的注釋標(biāo)簽
4. 導(dǎo)航樹(shù)
(1)處理子標(biāo)簽和其他后代標(biāo)簽children屬性獲取所有子標(biāo)簽descendant屬性獲取所有后代標(biāo)簽温自。
(2)處理兄弟標(biāo)簽beautifulsoup對(duì)象的next_sibings屬性(獲取之后的所有兄弟標(biāo)簽)加上get_text()方法使得處理表格十分的方便玄货。
(3)處理父標(biāo)簽parent屬性。
二. 正則表達(dá)式與BeautifulSoup
正則表達(dá)式可以作為beautifulsoup的語(yǔ)句的任一個(gè)參數(shù)使用,讓目標(biāo)元素的查找更加的方便悼泌。例如查找圖片中的src屬性值以../img/gifts/img開(kāi)頭,以.jpg結(jié)尾松捉。需要注意的是,各種環(huán)境下的正則表達(dá)式是不同的馆里。
images = bsObj.findAll("img":
{"src":re.compile("\.\.\/img\/gifts/img.*\.jpg")})
三. 獲取屬性
獲取一個(gè)標(biāo)簽對(duì)象的全部屬性返回一個(gè)字典隘世,且對(duì)象的屬性值為列表的形式
myTag.attrs ? ?獲取某一個(gè)屬性
myTag.attrs["someAttr"][0]
四. Lambda表達(dá)式
BeautifulSoup允許我們把一個(gè)lambda表達(dá)式當(dāng)做findAll函數(shù)的參數(shù)。唯一的限制條件是必須把一個(gè)標(biāo)簽作為參數(shù)且返回的結(jié)果是布爾類(lèi)型鸠踪。beautifulsoup用這個(gè)函數(shù)來(lái)判斷它遇到的每一個(gè)標(biāo)簽對(duì)象丙者,最后把評(píng)估結(jié)果為“真”的標(biāo)簽保留,把其他標(biāo)簽去除。
例如: 獲取有兩個(gè)屬性的標(biāo)簽
bsobj.findAll(lambda tag: len(tag.attrs)==2)
五. 類(lèi)似的BeautifulSoup庫(kù)
l1.xml
和beautifulsoup一樣優(yōu)秀,里面的xpath甚至比beautifulsoup還要快速方便,并且xpath里面的路徑可以直接通過(guò)chrome來(lái)獲取营密。
2.PyQuery
pyquery 可讓用jQuery的語(yǔ)法來(lái)對(duì)xml進(jìn)行操作械媒。非常像jQuery API而已。
3.HTML parser
python自帶的解析庫(kù),不用安裝可以直接使用评汰。