python學習筆記——BeautifulSoupa

詳細用法參考文檔:點擊打開鏈接

主要記錄各種查找用法:

導入:

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')  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章