python 如何使用find和find_all,爬蟲、找文字

2020-10-15 14:00:48

這篇文章我們來講講如何在python使用bs4模組返回值中正確使用find和find_all來取值。

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

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

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

我們來看看下面案例

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

a='0123456789'#因為我們電腦中的位元組都是從0開始算第一個位置
b=a.find('0')#這行程式碼的意思就是我要查詢a中0的位置
print(b)
>>0  

#這裡就是列印出來的內容

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

在來試試第二個案例

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

a='0123456789' 
b=a.find('5')#我要查詢a中5的位置
print(b)
>>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'])

下面我們把程式碼連起來打一遍看圖
在這裡插入圖片描述

看程式碼

one=bs.find(class_='one')
		one_1=one.find(class="navbar-branding")
	print(one_1.find('a') ['title'])

>>開發者的網上家園
#這就是最後返回的值

就這麼簡單。

三、 find_all在bs4模組返回值中怎麼使用

還是用上圖舉例
在這裡插入圖片描述
我們可以看到如果我要取下面的 li 標籤中的值怎麼辦

這時候我們就得用到find_al了(查詢全部一樣的)

先補充程式碼到這個li標籤的父類別

one=bs.find(class_='one')
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遍歷就能取出
本次教學就到這裡啦,因為沒有檢查,所以可能存在錯誤,發現錯誤立即聯絡我改正