python爬蟲時如何使用find和find_all的講解


 

這節課我們來講講如何在python使用bs4模塊返回值中正確使用find和find_all來取值。

 

我們先來看看find函數在兩種場景使用:

一、    find在字符串(str)時可以查找使用。

在字符串(str)是怎么來使用find函數,find函數就是“找到”的意思。

我們來看看下面案例

 

#---------案例1-----------

1 a='0123456789'#因為我們電腦中的字節都是從0開始算第一個位置
2 
3 b=a.find('0')#這行代碼的意思就是我要查找a中0的位置
4 
5 print(b)
6 
7  
8 
9 >>0  #這里就是打印出來的內容

因為0在a中的第0個位置

我們再來試試第二個案例

#---------案例2-----------

1 a='0123456789'2 
3 b=a.find('5')#我要查找a中5的位置
4 
5 print(b)
6 
7  
8 
9 >>5

其中你要查找的內容不在a中,則會返回 -1(大家可以在本地編譯器嘗試一下,在本地編譯器中查找其他字符) 。在str中的使用方法說到這里。

 

 

二、    find在bs4模塊返回值中怎么使用

我們在課堂上學過,bs4返回的值是<class 'bs4.BeautifulSoup'>

假設我把把bs4返回的值賦值給 bs

這時我們就要用   bs.find(class_='one')

這個代碼就是在bs值中從上往下找,找到第一個類等於one的值。

如果下圖

 

從上到下找是不是我標出來藍色區域是我要找的類,對的我們把他賦值給one,我們把他打印出來

Print('one')

這時候系統就會返回這樣一個值給我們,如下圖

 

 

 

 大家看,他返回的是從 class='one'開始到這個類標簽ul結束,對的,他不會返回其他值,他只會返回這個類的標簽開始到結束。

 

所以當bs4返回值時,第一步使用find找打包含自己要找的所有值中第一個父類,再賦值給函數,這樣這個函數就是我們進行下一步查找的對象。

 

接下倆我們就還可以使用find(找到)或者find_all(找到全部一樣的),來定位函數位置,如圖中:

 

 

 

 class="navbar-branding"就只有一個,我們像打印出  開發者的網上家園 怎么寫

 這時候我們假設,上面bs.find(class_='one')賦值給one函數那么我們就從one開始查找

one.find(class="navbar-branding")這樣查找出來的內哦讓那個就會返回給我們這個區域內容

 

 

 

 

 然后這個區域的文字再title值里面,我們就沒辦法直接用  .text 取值了,所以我們要接着查找

將one.find(class="navbar-branding")賦值給 one_1   ,然后用 one_1.find('a')來查找到a標簽后面加一個中括號取值['title']這樣打印出來內容就是“開發者的網上家園”了。連起來就是這樣寫

print(one_1.find('a') ['title'])

下面我們把代碼連起來打一遍看圖

 

 

 看代碼

 1 one=bs.find(class_='one')
 2 
 3        one_1=one.find(class="navbar-branding")
 4 
 5 print(one_1.find('a') ['title'])
 6 
 7  
 8 
 9 >>開發者的網上家園
10 
11 #這就是最后返回的值

就這么簡單。

 

 

三、    find_all在bs4模塊返回值中怎么使用

還是用上圖舉例

 

 

 我們可以看到如果我要取下面的 li 標簽中的值怎么辦,這時候我們就得用到find_al了(查找全部一樣的)

先補充代碼到這個li標簽的父類

1 one=bs.find(class_='one')
2 
3 one_1=one.find(class="navbar-branding")

然后我們用one_1來取值如下代碼

one_1.find_all('li')#這時候我們取值了再one_1區域中所有有li便簽的內容,他會返回給我們一個列表

列表時這樣的

[<li>…</li>,<li>…</li>,<li>…</li>,<li>…</li>,<li>…</li>,<li>…</li>,]

每一個區域就是一個內容,中間的   ...    我時為了圖省事,其實都是內容。竟然得到這樣的一個列表我們就可以使用for I in one_1.find_all('li')  這樣取遍歷出這個列表的東西,然后取值,或者我只要其中一個就是ne_1.find_all('li')[2]  后面加一個數字,列表取值大家應該都會把,這樣就可以定位到我們想要的東西了。

 

總結一下find就是查找某一項的第一個數據find_all就是找所有數據,然后用for遍歷就能取出

 

 

 

本次教程就到這里啦,因為沒有檢查,所以可能存在文字錯誤和同學不理解的地方,發現錯誤立即聯系我改正,V: xtzj008 (加好友備注來源【看博客園來的】,不備注來源的會忽略)  我們有專門的python學習群,為了幫助一些同學自學python。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM