使用流程:
-導(dǎo)包:from bs4 import BeautifulSoup
- 使用方式:可以將一個(gè)html文檔,轉(zhuǎn)化為BeautifulSoup對(duì)象,然后通過(guò)對(duì)象的方法或?qū)傩匀ゲ檎抑付ǖ墓?jié)點(diǎn)內(nèi)容。
(1)轉(zhuǎn)化本地文件:
- soup = BeautifulSoup(open(‘本地文件’),‘lxml’)
(2)轉(zhuǎn)化網(wǎng)絡(luò)文件(與requests配合):
- page_text = requests.get(url=url,headers=headers).text
-?soup = BeautifulSoup(page_text,'lxml')
(3)打印soup對(duì)象顯示內(nèi)容為html文件中的內(nèi)容
基礎(chǔ)語(yǔ)法:
? (1)根據(jù)標(biāo)簽名查找
- soup.a 只能找到第一個(gè)符合要求的標(biāo)簽
(2)獲取屬性
- soup.a.atters 獲取a所有的屬性和屬性值,返回一個(gè)字典
- soup.a.atters['href'] 獲取href屬性
- soup.a['href'] 上面的簡(jiǎn)寫(xiě)
(3)***獲取內(nèi)容
- soup.a.string 獲取 之間的文本內(nèi)容(a不含子標(biāo)簽)
- soup.a['href'].string 獲取a標(biāo)簽中href的內(nèi)容
- soup.a.text 獲取 之間包括子標(biāo)簽的所有文本內(nèi)容
- soup.a.get_text() 同上面用法
【注意】如果標(biāo)簽里還有標(biāo)簽,那么string獲取到的結(jié)果為None,其他兩個(gè)可以獲取文本內(nèi)容
(4)***find:找到第一個(gè)符合要求的標(biāo)簽
- soup.find('a') 找到第一個(gè)符合要求的標(biāo)簽(a標(biāo)簽)
- soup.find('a',title='xxx')? 找到第一個(gè)title=‘xxx’的a標(biāo)簽
- soup.find('a',alt='xxx') 同上
- soup.find('a',class_='xxx') 同上,【注意】class后的_
- soup.find('a',id='xxx') 同上
(5)***find_all:找到所有符合要求的標(biāo)簽
- soup.find_all('a') 找到所有a標(biāo)簽
- soup.find(['a','b']) 找到所有a和b標(biāo)簽
- soup.find_all('a',limit=2) 限制前兩個(gè)
(6)***根據(jù)選擇器選擇指定的內(nèi)容
select:soup.select('.feng') 選擇class屬性值為feng的所有標(biāo)簽
- 常見(jiàn)的選擇器:標(biāo)簽選擇器(a)、類(lèi)型選擇器(.)、id選擇器(#)、層級(jí)選擇器
- 層級(jí)選擇器:
div > p > a > .lala 只能選擇最下面一級(jí) class=lala的子標(biāo)簽
div .dudu div下面clas=dudu的所有字標(biāo)簽
【注意】?select選擇器返回永遠(yuǎn)是列表,需要通過(guò)下表提取指定的對(duì)象
實(shí)例:使用bs4實(shí)現(xiàn)將詩(shī)詞名句網(wǎng)站中三國(guó)演義小說(shuō)的每一章的內(nèi)同爬取到本地磁盤(pán)進(jìn)行存儲(chǔ)
import
requests
from
bs4
import
BeautifulSoup
#獲得url
url
=
'
http://www.shicimingju.com/book/sanguoyanyi.html
'
headers
=
{
'
User-Agent
'
:
''
}
#獲取網(wǎng)頁(yè)并轉(zhuǎn)換成BeautifulSoup對(duì)象
page_text
= requests.get(url=url,headers=
headers).text
soup
= BeautifulSoup(page_text,
'
lxml
'
)
#選取class=book-mulu的div標(biāo)簽 >下的ul標(biāo)簽 >下的li標(biāo)簽 >下的所有a標(biāo)簽
a_list
= soup.select(
'
.book-mulu>ul>li>a
'
)
#創(chuàng)建sanguo.txt文件
fp
= open(
'
sanguo.txt
'
,
'
w
'
,encoding=
'
utf-8
'
)
#遍歷所有a標(biāo)簽
for
a
in
a_list:
#獲取a標(biāo)簽文本
title
=
a.string
#獲取a標(biāo)簽中href屬性的文本信息,并組成url
detail_url
=
'
http://www.shicimingju.com
'
+ a[
'
href
'
]
#獲取新url內(nèi)的頁(yè)面信息
detail_page_text
= requests.get(url=detail_url,headers=
headers).text
#將新url網(wǎng)頁(yè)創(chuàng)建為BeautifulSoup對(duì)象
title_soup
= BeautifulSoup(detail_page_text,
'
lxml
'
)
#獲取新url內(nèi)class='chapter_content'的div標(biāo)簽的文本信息
content
= title_soup.find(
'
div
'
,class_=
'
chapter_content
'
).text
#將標(biāo)題與正文間加入\n并寫(xiě)入sanguo.txt文件
fp.write(title
+
'
\n
'
+
content)
#每一章節(jié)下載完畢都打印成功
print
(title,
'
下載完畢
'
)
print
(
'
over
'
)
fp.close()
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

