前言
我們將利用 Beautiful Soup 模塊的搜索功能,根據標簽名稱、標簽屬性、文檔文本和正則表達式來搜索。
搜索方法
Beautiful Soup 內建的搜索方法如下:
find() find_all() find_parent() find_parents() find_next_sibling() find_next_siblings() find_previous_sibling() find_previous_siblings() find_previous() find_all_previous() find_next() find_all_next()使用 find() 方法搜索
首先還是需要建立一個 HTML 文件用來做測試。
<html><body><div class="ecopyramid"> <ul id="producers"> <li class="producerlist"> <div class="name">plants</div> <div class="number">100000</div> </li> <li class="producerlist"> <div class="name">algae</div> <div class="number">100000</div> </li> </ul> <ul id="primaryconsumers"> <li class="primaryconsumerlist"> <div class="name">deer</div> <div class="number">1000</div> </li> <li class="primaryconsumerlist"> <div class="name">rabbit</div> <div class="number">2000</div> </li> </ul> <ul id="secondaryconsumers"> <li class="secondaryconsumerlist"> <div class="name">fox</div> <div class="number">100</div> </li> <li class="secondaryconsumerlist"> <div class="name">bear</div> <div class="number">100</div> </li> </ul> <ul id="tertiaryconsumers"> <li class="tertiaryconsumerlist"> <div class="name">lion</div> <div class="number">80</div> </li> <li class="tertiaryconsumerlist"> <div class="name">tiger</div> <div class="number">50</div> </li> </ul></div></body></html>
我們可以通過 find()
方法來獲得 <ul> 標簽,默認情況下會得到第一個出現的。接著再獲取 <li> 標簽,默認情況下還是會得到第一個出現的,接著獲得 <div> 標簽,通過輸出內容來驗證是否獲取了第一個出現的標簽。
from bs4 import BeautifulSoupwith open('search.html','r') as filename: soup = BeautifulSoup(filename,'lxml')first_ul_entries = soup.find('ul')print first_ul_entries.li.div.string
find() 方法具體如下:
find(name,attrs,recursive,text,**kwargs)
正如上代碼所示,find()
方法接受五個參數:name、attrs、recursive、text 和 **kwargs 。name 、attrs 和 text 參數都可以在 find()
方法充當過濾器,提高匹配結果的精確度。
搜索標簽
除了上面代碼的搜索 <ul> 標簽外,我們還可以搜索 <li> 標簽,返回結果也是返回出現的第一個匹配內容。
tag_li = soup.find('li')# tag_li = soup.find(name = "li")print type(tag_li)print tag_li.div.string
新聞熱點
疑難解答