Beautiful Soup的用法(五):select的使用

select 的功能跟findfind_all 一樣用來選取特定的標簽,它的選取規則依賴于css,我們把它叫做css選擇器,如果之前有接觸過jquery ,可以發現select的選取規則和jquery有點像。

通過標簽名查找

在進行過濾時標簽名不加任何修飾,如下:

from bs4 import BeautifulSoup  
import re  

html = """  
<html><head><title>The Dormouse's story</title></head>  
<body>  
<p class="title" name="dromouse"><b>The Dormouse's story</b></p>  
<p class="story">Once upon a time there were three little sisters; and their names were  
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and  
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;  
and they lived at the bottom of a well.</p>  
</body>  
</html>  
"""  

soup = BeautifulSoup(html, "lxml")  
print soup.select('p')

返回的結果如下:

[<p class="title" name="dromouse"><b>The Dormouse's story</b></p>, <p class="story">Once upon a time there were three little sisters; and their names were\n<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and\n<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>;\nand they lived at the bottom of a well.</p>]

通過結果可以看出,他返回的是一個數組,再繼續看看數組里的元素是什么呢?

print type(soup.select('p')[0])

結果為:

<class 'bs4.element.Tag'>

清楚了返回的是bs4.element.Tag,這一點和find_all是一樣的,select('p') 返回了 所有標簽名為p的tag。

通過類名和id進行查找

在進行過濾時類名前加點,id名前加 #

print soup.select('.title')  
print soup.select('#link2')

返回的結果為:

[<p class="title" name="dromouse"><b>The Dormouse's story</b></p>]
[<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]

通過屬性查找

如果不是id或者是類名,是不是就不能進行過濾了?如果可以,該如何來表達,

print soup.select('[href="http://example.com/lacie"]')

選擇hrefhttp://example.com/lacie 的tag。

組合查找

組合查找可以分為兩種,一種是在一個tag中進行兩個條件的查找,一種是樹狀的查找一層一層之間的查找。

第一種情況,如下所示:

print soup.select('a#link2')

選擇標簽名為aidlink2的tag。

輸出的結果如下:

[<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]

另一種情況,如下:

body開始,在body里面查找 所有的 p,在所有的p 中查找 標簽名為aid 為link2的tag,這樣像樹狀一層一層的查找,在分析html結構是是非常常見的。層和層之間用空格分開。

print soup.select('body p a#link2')

結果如下:

[<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]

轉載請標明來之:http://www.peyycv.tw/

更多教程:阿貓學編程

Beautiful Soup的用法 系類文章

所有評論

如果對文章有異議,請加qq:1752338621