python爬蟲(chóng)學(xué)習(xí)筆記--BeautifulSoup4庫(kù)的使用詳解
使用范例
from bs4 import BeautifulSoup #創(chuàng)建 Beautiful Soup 對(duì)象 # 使用lxml來(lái)進(jìn)行解析 soup = BeautifulSoup(html,"lxml") print(soup.prettify())
返回結(jié)果

常用的對(duì)象–Tag
就是 HTML 中的一個(gè)個(gè)標(biāo)簽
在上面范例的基礎(chǔ)上添加
from bs4 import BeautifulSoup #創(chuàng)建 Beautiful Soup 對(duì)象 # 使用lxml來(lái)進(jìn)行解析 soup = BeautifulSoup(html,"lxml") #print(soup.prettify()) #創(chuàng)建 Beautiful Soup 對(duì)象 soup = BeautifulSoup(html,'lxml') print (soup.title)#None因?yàn)檫@里沒(méi)有tiele標(biāo)簽所以返回none print (soup.head)#None因?yàn)檫@里沒(méi)有head標(biāo)簽所以返回none print (soup.a)#返回 <a class="fill-dec" target="_blank">編輯自我介紹,讓更多人了解你<span class="write-icon"></span></a> print (type(soup.p))#返回 <class 'bs4.element.Tag'> print( soup.p)
其中print( soup.p)
返回結(jié)果為

同樣地,在上面地基礎(chǔ)上添加
print (soup.name)# [document] #soup 對(duì)象本身比較特殊,它的 name 即為 [document]
返回

print (soup.head.name)#head #對(duì)于其他內(nèi)部標(biāo)簽,輸出的值為標(biāo)簽本身的名稱
print (soup.p.attrs)##把p標(biāo)簽的所有屬性打印出來(lái),得到的類型是一個(gè)字典。
返回

print (soup.p['class'])#獲取P標(biāo)簽下地class標(biāo)簽
soup.p['class'] = "newClass" print (soup.p) # 可以對(duì)這些屬性和內(nèi)容等等進(jìn)行修改
返回

常用的對(duì)象–NavigableString
前面地基礎(chǔ)上添加
print (soup.p.string) # The Dormouse's story print (type(soup.p.string)) # <class 'bs4.element.NavigableString'>thon
返回結(jié)果

常用的對(duì)象–BeautifulSoup
beautiful soup對(duì)象表示文檔的全部?jī)?nèi)容。大多數(shù)情況下,它可以被視為標(biāo)記對(duì)象。它支持遍歷文檔樹(shù)并搜索文檔樹(shù)中描述的大多數(shù)方法因?yàn)锽eauty soup對(duì)象不是真正的HTML或XML標(biāo)記,所以它沒(méi)有名稱和屬性。但是,有時(shí)查看其內(nèi)容很方便。Name屬性,因此美麗的湯對(duì)象包含一個(gè)特殊屬性。值為“[文檔]”的名稱
print(soup.name) #返回 '[document]'
常用的對(duì)象–Comment
用于解釋注釋部分的內(nèi)容
markup = "<b><!--Hey, buddy. Want to buy a used parser?--></b>" soup = BeautifulSoup(markup) comment = soup.b.string type(comment) # <class 'bs4.element.Comment'>
對(duì)文檔樹(shù)的遍歷
在上面的基礎(chǔ)上添加
head_tag = soup.div # 返回所有子節(jié)點(diǎn)的列表 print(head_tag.contents)
返回

同理
head_tag = soup.div
# 返回所有子節(jié)點(diǎn)的迭代器
for child in head_tag.children:
print(child)
返回

tag中包含多個(gè)字符串的情況
可用 .strings 來(lái)循環(huán)獲取
for string in soup.strings:
print(repr(string))
返回

.stripped_strings 去除空白內(nèi)容
for string in soup.stripped_strings:
print(repr(string))
返回

搜索文檔樹(shù)–find和find_all
找到所有
print(soup.find_all("a",id='link2'))
find方法是找到第一個(gè)滿足條件的標(biāo)簽后立即返回,返回一個(gè)元素。find_all方法是把所有滿足條件的標(biāo)簽都選到,然后返回。
select方法(各種查找)
#通過(guò)標(biāo)簽名查找:
print(soup.select('a'))
#通過(guò)類名查找:
#通過(guò)類名,則應(yīng)該在類的前面加一個(gè)'.'
print(soup.select('.sister'))
#通過(guò)id查找:
#通過(guò)id查找,應(yīng)該在id的名字前面加一個(gè)#號(hào)
print(soup.select("#link1"))
查找a標(biāo)簽返回的結(jié)果

其他因?yàn)榫W(wǎng)頁(yè)本身沒(méi)有,返回的是一個(gè)空列表
組合查找
print(soup.select("p #link1"))#查找 p 標(biāo)簽中,id 等于 link1的內(nèi)容
子標(biāo)簽查找
print(soup.select("head > title"))
通過(guò)屬性查找
print(soup.select('a[))#屬性與標(biāo)簽屬同一節(jié)點(diǎn),中間不能有空格
獲取內(nèi)容
先查看類型
print (type(soup.select('div')))

for title in soup.select('div'):
print (title.get_text())
返回

print (soup.select('div')[20].get_text())#選取第20個(gè)div標(biāo)簽的內(nèi)容
返回

總結(jié)
本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
- Python爬蟲(chóng)請(qǐng)求模塊Urllib及Requests庫(kù)安裝使用教程
- python爬蟲(chóng)lxml庫(kù)解析xpath網(wǎng)頁(yè)過(guò)程示例
- python爬蟲(chóng)之pyppeteer庫(kù)簡(jiǎn)單使用
- Python爬蟲(chóng)基礎(chǔ)之selenium庫(kù)的用法總結(jié)
- python爬蟲(chóng)之selenium庫(kù)的安裝及使用教程
- python爬蟲(chóng)請(qǐng)求庫(kù)httpx和parsel解析庫(kù)的使用測(cè)評(píng)
- 盤(pán)點(diǎn)總結(jié)Python爬蟲(chóng)常用庫(kù)(附官方文檔)
相關(guān)文章
Pytorch 解決自定義子Module .cuda() tensor失敗的問(wèn)題
這篇文章主要介紹了Pytorch 解決自定義子Module .cuda() tensor失敗的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
Python 爬取淘寶商品信息欄目的實(shí)現(xiàn)
這篇文章主要介紹了Python 爬取淘寶商品信息欄目的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
使用Django Form解決表單數(shù)據(jù)無(wú)法動(dòng)態(tài)刷新的兩種方法
這篇文章主要介紹了使用Django Form解決表單數(shù)據(jù)無(wú)法動(dòng)態(tài)刷新的兩種方法,需要的朋友可以參考下2017-07-07
python mysql實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python mysql實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
Python通過(guò)RabbitMQ服務(wù)器實(shí)現(xiàn)交換機(jī)功能的實(shí)例教程
RabbitMQ是一個(gè)基于消息隊(duì)列的服務(wù)器程序,Python可以通過(guò)Pika庫(kù)來(lái)驅(qū)動(dòng)它,這里我們將來(lái)看一個(gè)Python通過(guò)RabbitMQ服務(wù)器實(shí)現(xiàn)交換機(jī)功能的實(shí)例教程:2016-06-06
如何用Python編寫(xiě)一個(gè)電子考勤系統(tǒng)
這篇文章主要介紹了用Python編寫(xiě)一個(gè)電子考勤系統(tǒng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
Python數(shù)據(jù)結(jié)構(gòu)之遞歸方法詳解
這篇文章主要為大家介紹了遞歸的基本概念以及如何構(gòu)建遞歸程序。通過(guò)本章的學(xué)習(xí),大家可以理解遞歸的基本概念,了解遞歸背后蘊(yùn)含的編程思想以及掌握構(gòu)建遞歸程序的方法,需要的可以參考一下2022-04-04
簡(jiǎn)單介紹利用TK在Python下進(jìn)行GUI編程的教程
這篇文章主要介紹了簡(jiǎn)單介紹利用TK在Python下進(jìn)行GUI編程的教程,本文來(lái)自于IBM官方開(kāi)發(fā)者技術(shù)文檔,需要的朋友可以參考下2015-04-04

