大家好颂跨,我是小瑜!
今天來(lái)給大家介紹用BeautifulSoup4來(lái)對(duì)數(shù)據(jù)進(jìn)行解析和提取的方法扯饶。
前言
當(dāng)我們給服務(wù)器發(fā)送請(qǐng)求獲取響應(yīng)之后恒削,接下來(lái)我們就需要從響應(yīng)的字符串中解析和提取需要的數(shù)據(jù)信息池颈。
接下來(lái)我將給大家介紹用BeautifulSoup4來(lái)對(duì)數(shù)據(jù)進(jìn)行提取的方式,供大家學(xué)習(xí)钓丰。
安裝
BeautifulSoup3目前已經(jīng)停止開發(fā)躯砰,推薦現(xiàn)在的項(xiàng)目使用BeautifulSoup4(BS4),更為方便的是携丁,官網(wǎng)也提供了它的中文開發(fā)說明文檔琢歇。
安裝命令如下:
pip install BeautifulSoup4
安裝好后,就可以正常使用了梦鉴!
解析數(shù)據(jù)
BeautifulSoup解析數(shù)據(jù)的用法非常簡(jiǎn)單李茫,如圖:
在括號(hào)中,要輸入兩個(gè)參數(shù)尚揣,第1個(gè)參數(shù)是要被解析的文本涌矢,注意了,它必須必須必須是字符串快骗。括號(hào)中的第2個(gè)參數(shù)用來(lái)標(biāo)識(shí)解析器,解析器有如圖以下幾種類型(圖片來(lái)源網(wǎng)絡(luò)):
我建議用的是Python內(nèi)置庫(kù):html.parser塔次。因?yàn)樗鞘褂梅绞阶詈?jiǎn)單的方篮,什么基礎(chǔ)的人群都適合。
提取數(shù)據(jù)
我們?nèi)匀皇褂肂eautifulSoup來(lái)提取數(shù)據(jù)励负。這一步藕溅,又可以分為兩部分知識(shí):find()與find_all(),以及Tag對(duì)象(標(biāo)簽對(duì)象)继榆。
1. find()與find_all()
find()與find_all()是BeautifulSoup對(duì)象的兩個(gè)方法巾表,它們可以匹配html的標(biāo)簽和屬性,把BeautifulSoup對(duì)象里符合要求的數(shù)據(jù)都提取出來(lái)略吨。
它倆的用法是一樣的集币,區(qū)別在于它們提取的數(shù)據(jù)數(shù)量。
find()只提取首個(gè)滿足要求的數(shù)據(jù)翠忠。find()方法將代碼從上往下找鞠苟,找到符合條件的第一個(gè)數(shù)據(jù),不管后面還有沒有滿足條件的其他數(shù)據(jù)秽之,停止尋找当娱,立即返回。
而find_all()提取出的是所有滿足要求的數(shù)據(jù)考榨。代碼從上往下找跨细,一直到文檔的最后,把所有符合條件的數(shù)據(jù)揣好河质,一起打包返回冀惭。
兩者用法圖:
2. Tag對(duì)象
我們現(xiàn)在提取出來(lái)的數(shù)據(jù)還不是目標(biāo)數(shù)據(jù)震叙,里面含著HTML標(biāo)簽,所以下面云头,我們要進(jìn)入到提取數(shù)據(jù)中的另一個(gè)知識(shí)點(diǎn)——Tag對(duì)象捐友。
當(dāng)我們用type()查看我們提取出來(lái)的數(shù)據(jù)類型發(fā)現(xiàn),我們提取出來(lái)的數(shù)據(jù)類型是<class 'bs4.element.Tag'>溃槐,是Tag對(duì)象匣砖。
接下來(lái)我們看看Tag類對(duì)象的常用屬性和方法了。
首先昏滴,Tag對(duì)象可以使用find()與find_all()來(lái)繼續(xù)檢索猴鲫。這樣使得我們可以分級(jí)一步一步來(lái)進(jìn)行對(duì)數(shù)據(jù)的提取。
然后谣殊,就是把Tag對(duì)象中的文本提取出來(lái)拂共。就是用到上面的Tag.text和Tag['屬性名']兩種屬性/方法來(lái)提取出來(lái)目標(biāo)數(shù)據(jù)。
完成這一步之后姻几,我們就成功解析宜狐、提取到了所有的數(shù)據(jù)。
實(shí)操運(yùn)用
我們通過爬取網(wǎng)上書店Books to Scrape的Travel類書籍的書名蛇捌、評(píng)分抚恒、價(jià)格三種信息,來(lái)鞏固今天的知識(shí)络拌。
1. 頁(yè)面分析
我們通過對(duì)該網(wǎng)頁(yè)的頁(yè)面進(jìn)行分析發(fā)現(xiàn)俭驮,它是一個(gè)靜態(tài)存儲(chǔ)的網(wǎng)頁(yè),所有的數(shù)據(jù)都存儲(chǔ)在源網(wǎng)頁(yè)標(biāo)簽中春贸。
這樣就可以使用BeautifulSoup來(lái)對(duì)數(shù)據(jù)進(jìn)行提取混萝。
2. 提取數(shù)據(jù)
soup = BeautifulSoup(html,'html.parser')
items = soup.find_all('article')
foriteminitems:
a = item.find('h3').find('a')['title']
b = item.find('p')['class'][1]
c = item.find(class_="price_color").text
ulist.append([a,b,c])
3. 數(shù)據(jù)存儲(chǔ)
還是看這篇文章就夠了!一文教會(huì)你萍恕,Python數(shù)據(jù)如何儲(chǔ)存
總結(jié)
1. 本文詳細(xì)介紹了用BeautifulSoup來(lái)進(jìn)行對(duì)響應(yīng)數(shù)據(jù)的解析和處理逸嘀,內(nèi)容較多,請(qǐng)讀者仔細(xì)閱讀雄坪。
2. 當(dāng)解析和提取class標(biāo)簽的屬性時(shí)厘熟,需要寫成class_=,直接書寫class=维哈,程序會(huì)報(bào)錯(cuò)绳姨,避免與python語(yǔ)法中的類 class發(fā)生沖突。
3. 當(dāng)提取數(shù)據(jù)的屬性中有空格時(shí)需要將空格換成.來(lái)代替阔挠,否則將無(wú)法解析和提取出該標(biāo)簽中的數(shù)據(jù)飘庄。
4. 后臺(tái)私信我發(fā)送[Bs4]即可獲得項(xiàng)目源碼。