python 如何使用find和find_all爬蟲、找文本的實現(xiàn)
這篇文章我們來講講如何在python使用bs4模塊返回值中正確使用find和find_all來取值。
我們先來看看find函數(shù)在兩種場景使用: 一、 find在字符串(str)時可以查找使用。
在字符串(str)是怎么來使用find函數(shù),find函數(shù)就是找到的意思。
我們來看看下面案例
#---------案例1-----------a=’0123456789’#因為我們電腦中的字節(jié)都是從0開始算第一個位置b=a.find(’0’)#這行代碼的意思就是我要查找a中0的位置print(b)
>>0
#這里就是打印出來的內(nèi)容
應(yīng)為0在a中的第0個位置
在來試試第二個案例
#---------案例2-----------a=’0123456789’ b=a.find(’5’)#我要查找a中5的位置print(b)
>>5
其中你要查找的內(nèi)容不在a中,則會返回 -1 。在str中的使用方法說到這里。
二、 find在bs4模塊返回值中怎么使用
我們在課堂上學(xué)過,bs4返回的值是 <class ’bs4.BeautifulSoup’>
假設(shè)我把把bs4返回的值賦值給 bs
這時我們就要用 bs.find(class_=‘one’)
這個代碼就是在bs值中從上往下找,找到第一個類等于one的值。
如果下圖
從上到下找是不是我標(biāo)出來藍(lán)色區(qū)域是我要找的類,對的我們把他賦值給one,我們把他打印出來
print(’one’)
這時候系統(tǒng)就會返回這樣一個值給我們,如下圖
大家看,他返回的是從 class=’one’開始到這個類標(biāo)簽ul結(jié)束,對的,他不會返回其他值,他只會返回這個類的標(biāo)簽開始到結(jié)束。
所以當(dāng)bs4返回值時,第一步使用find找打包含自己要找的所有值中第一個父類,再賦值給函數(shù),這樣這個函數(shù)就是我們進(jìn)行下一步查找的對象。
接下倆我們就還可以使用find(找到)或者find_all(找到全部一樣的),來定位函數(shù)位置,像圖中:
class='navbar-branding'就只有一個,我們像打印出 開發(fā)者的網(wǎng)上家園 怎么寫
這時候我們假設(shè),上面bs.find(class_=’one’)賦值給one函數(shù)那么我們就從one開始查找one.find(class='navbar-branding')這樣查找出來的內(nèi)哦讓那個就會返回給我們這個區(qū)域內(nèi)容
然后這個區(qū)域的文字再title值里面,我們就沒辦法直接用 .text 取值了,所以我們要接著查找
將one.find(class='navbar-branding')賦值給 one_1
然后用 one_1.find(’a’)來查找到a標(biāo)簽
后面加一個中括號取值[‘title’]這樣打印出來內(nèi)容就是“開發(fā)者的網(wǎng)上家園”了。
連起來就是這樣寫
print(one_1.find(’a’) [’title’])
下面我們把代碼連起來打一遍看圖
看代碼
one=bs.find(class_=’one’)one_1=one.find(class='navbar-branding')print(one_1.find(’a’) [’title’])>>開發(fā)者的網(wǎng)上家園#這就是最后返回的值
就這么簡單。
三、 find_all在bs4模塊返回值中怎么使用
還是用上圖舉例
我們可以看到如果我要取下面的 li 標(biāo)簽中的值怎么辦
這時候我們就得用到find_al了(查找全部一樣的)
先補充代碼到這個li標(biāo)簽的父類
one=bs.find(class_=’one’)one_1=one.find(class='navbar-branding')
然后我們用one_1來取值如下代碼
one_1.find_all(’li’)#這時候我們?nèi)≈盗嗽賝ne_1區(qū)域中所有有l(wèi)i便簽的內(nèi)容
他會返回給我們一個列表
列表時這樣的
<li>…</li>,<li>…</li>,<li>…</li>,<li>…</li>,<li>…</li>,<li>…</li>
每一個區(qū)域就是一個內(nèi)容,中間的。。。我時為了圖省事,其實都是內(nèi)容。
竟然得到這樣的一個列表我們就可以使用for I in one_1.find_all(’li’)
這樣取遍歷出這個列表的東西,然后取值,
或者我只要其中一個就是ne_1.find_all(’li’)[2] 后面加一個數(shù)字,
列表取值大家應(yīng)該都會把,這樣就可以定位到我們想要的東西了。
總結(jié)一下find就是查找某一項的第一個數(shù)據(jù),find_all就是找所有數(shù)據(jù),然后用for遍歷就能取出
到此這篇關(guān)于python 如何使用find和find_all爬蟲、找文本的實現(xiàn)的文章就介紹到這了,更多相關(guān)python find和find_all爬蟲 內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. IntelliJ IDEA導(dǎo)入jar包的方法2. SSM框架JSP使用Layui實現(xiàn)layer彈出層效果3. 刪除docker里建立容器的操作方法4. IntelliJ IDEA導(dǎo)出項目的方法5. .Net中的Http請求調(diào)用詳解(Post與Get)6. 解決python DataFrame 打印結(jié)果不換行問題7. java使用xfire搭建webservice服務(wù)的過程詳解8. Java導(dǎo)出Execl疑難點處理的實現(xiàn)9. python 調(diào)用API接口 獲取和解析 Json數(shù)據(jù)10. Python如何測試stdout輸出
