詳細用法參考文檔:點擊打開鏈接
主要記錄各種查找用法:
導入:
from bs4 import BeautifulSoup
對象:
Tag
soup = BeautifulSoup('< b class = ''boldest'' ')
tag = soup.b
type(tag)
Tag 有兩個最重要的屬性:name ,attributes
tag.name 獲取Tag的名字
tag.attrs 獲取Tag的屬性和屬性值
tag['屬性名'] 獲取Tag的屬性值
過濾器:
字符串,正則表達式,方法,True
搜索的方法:
————find_all(),find()
1 / 通過標籤名來搜索
find_all('b') #搜索文檔中所有的b標籤
2 / 通過正則表達式來搜索.如果傳入正則表達式作爲參數,Beautiful Soup會通過正則表達式的 match()
來匹配內容.
for tag in soup.find_all(re.compile('^b')):
print(tag.name)
3 / 通過列表匹配多個 。如果傳入列表參數,Beautiful Soup會將與列表中任一元素匹配的內容返回.
soup.find_all( [ 'a' , 'b' ])
4 / 通過方法參數進行匹配
——— 1) 匹配符合的Tag
def has_class_but_no_id(tag):
return tag.has_attr('class') and not tag.has_attr('id')
soup.find_all(has_class_but_no_id)
———2)匹配搜索一類標籤屬性 ( 通過一個方法來過濾一類標籤屬性的時候, 這個方法的參數是要被過濾的屬性的值, 而不是這個標籤)
defnot_lacie(href):
return href and not re.compile('lacie').search(href)
soup.find_all(href = not_lacie)
find_all()使用細節:
keywords(關鍵字)方式:
find_all( name , attrs , recursive , string , **kwargs )
1 / 通過Tag名字搜索
soup.find_all('a') #搜索出全部a標籤
2
/ 通過id搜索
soup.find_all(id = 'L') #搜索出id ='L'的標籤
3 / 通過屬性參數搜索
soup.find_all(href = re.compile('elise')) #匹配每一個Tag的href屬性,找到含有elise的href屬性的Tag
soup.find_all(id=True) #匹配出含有id的標籤
4 / 通過多屬性搜索
soup.find_all(href = re.compile('elise') , id = 'L') #
5 / 通過attrs參數搜索特殊屬性,用attrs定義字典。
data_soup.find_all(attrs = {'data-foo':'value})
CSS類名方式 :class_參數:
接受不同類型的過濾器:字符串,正則表達式,方法,True
1 / 通過class_參數所有指定Tag
soup.find_all('a',class_='sister')
soup.find_all('a',attrs = {'class':'sister'})
string參數:
1 / soup.find_all(string='elise') #搜索文檔中的elise
2 / soup.find_all(string=['elise','babi','hose']) #搜索多個子串
3 / soup.find_all(string = re.compile{'elise')) #搜索包含elise的字符串
4 / 搜索內容裏包含指定字符串的Tag
soup.find_all('a',string='elise) #搜索內容裏包含elise的<a>標籤
limit參數:(當搜索結果達到limit限制時,就停止搜索)
soup.find_all('a',limit=2) #只返回兩個<a>標籤
recursive=False參數:(只搜索當前Tag直接子節點)
soup.find_all('title',recursive=False)
————select()方法 (CSS選擇器):
1 / 通過字符串參數搜索
soup.select('title') #搜索所有tittle標籤
soup.select('p nth-of-type(3)') #搜索第三個p標籤
2 / 通過tag標籤逐層查找
soup.select('body a')
soup.select('html head title')
3 / 找到某個標籤下的直接子標籤
soup.select('head > title')
soup.select('p > a')
soup.select('p > a:nth-of-type(2)')
soup.select('p > #link1')
soup.select('body > a')
4 / 查找兄弟節點標籤
soup.select('#link1 ~ .sister') #查找id='link1'所在標籤的所有兄弟節點
soup.select('#link1 + .sister') #查找id='link1'所在標籤的第一個兄弟節點
5 / 通過類名查找
soup.select('.sister') #查找class=‘sister'的第一個標籤
soup.select('class~ = 'sister') #查找所有class = ’sister‘的標籤
6 / 通過Tag的id查找
soup.select('#link1') #查找id = 'link1'的標籤
soup.select('a#link1') #查找id = 'link1'的<a> 標籤
7 / 通過多種CSS屬性查找
soup.select('#link1, #link2') #查找含有id = 'link1' 或者id = 'link2'的標籤
8 / 通過標籤存在的某個屬性來查找
soup.select('a[href]') #查找包含href的<a>標籤
9 / 通過屬性的值查找
soup.select('a[href="http://example.com/elsie"]')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
soup.select('a[href^="http://example.com/"]')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
# <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
# <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
soup.select('a[href$="tillie"]')
# [<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
soup.select('a[href*=".com/el"]')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
10 / 返回查找的第一個
soup.select_one('.sister')