使用流程:
-導包:from bs4 import BeautifulSoup
- 使用方式:可以將一個html文檔,轉化為BeautifulSoup對象,然后通過對象的方法或屬性去查找指定的節點內容。
(1)轉化本地文件:
- soup = BeautifulSoup(open(‘本地文件’),‘lxml’)
(2)轉化網絡文件(與requests配合):
- page_text = requests.get(url=url,headers=headers).text
-?soup = BeautifulSoup(page_text,'lxml')
(3)打印soup對象顯示內容為html文件中的內容
基礎語法:
? (1)根據標簽名查找
- soup.a 只能找到第一個符合要求的標簽
(2)獲取屬性
- soup.a.atters 獲取a所有的屬性和屬性值,返回一個字典
- soup.a.atters['href'] 獲取href屬性
- soup.a['href'] 上面的簡寫
(3)***獲取內容
- soup.a.string 獲取 之間的文本內容(a不含子標簽)
- soup.a['href'].string 獲取a標簽中href的內容
- soup.a.text 獲取 之間包括子標簽的所有文本內容
- soup.a.get_text() 同上面用法
【注意】如果標簽里還有標簽,那么string獲取到的結果為None,其他兩個可以獲取文本內容
(4)***find:找到第一個符合要求的標簽
- soup.find('a') 找到第一個符合要求的標簽(a標簽)
- soup.find('a',title='xxx')? 找到第一個title=‘xxx’的a標簽
- soup.find('a',alt='xxx') 同上
- soup.find('a',class_='xxx') 同上,【注意】class后的_
- soup.find('a',id='xxx') 同上
(5)***find_all:找到所有符合要求的標簽
- soup.find_all('a') 找到所有a標簽
- soup.find(['a','b']) 找到所有a和b標簽
- soup.find_all('a',limit=2) 限制前兩個
(6)***根據選擇器選擇指定的內容
select:soup.select('.feng') 選擇class屬性值為feng的所有標簽
- 常見的選擇器:標簽選擇器(a)、類型選擇器(.)、id選擇器(#)、層級選擇器
- 層級選擇器:
div > p > a > .lala 只能選擇最下面一級 class=lala的子標簽
div .dudu div下面clas=dudu的所有字標簽
【注意】?select選擇器返回永遠是列表,需要通過下表提取指定的對象
實例:使用bs4實現將詩詞名句網站中三國演義小說的每一章的內同爬取到本地磁盤進行存儲
import requests from bs4 import BeautifulSoup
#獲得url url = ' http://www.shicimingju.com/book/sanguoyanyi.html ' headers = { ' User-Agent ' : '' }
#獲取網頁并轉換成BeautifulSoup對象 page_text = requests.get(url=url,headers= headers).text soup = BeautifulSoup(page_text, ' lxml ' )
#選取class=book-mulu的div標簽 >下的ul標簽 >下的li標簽 >下的所有a標簽 a_list = soup.select( ' .book-mulu>ul>li>a ' )
#創建sanguo.txt文件 fp = open( ' sanguo.txt ' , ' w ' ,encoding= ' utf-8 ' )
#遍歷所有a標簽 for a in a_list:
#獲取a標簽文本 title = a.string
#獲取a標簽中href屬性的文本信息,并組成url detail_url = ' http://www.shicimingju.com ' + a[ ' href ' ]
#獲取新url內的頁面信息 detail_page_text = requests.get(url=detail_url,headers= headers).text #將新url網頁創建為BeautifulSoup對象 title_soup = BeautifulSoup(detail_page_text, ' lxml ' )
#獲取新url內class='chapter_content'的div標簽的文本信息 content = title_soup.find( ' div ' ,class_= ' chapter_content ' ).text
#將標題與正文間加入\n并寫入sanguo.txt文件 fp.write(title + ' \n ' + content)
#每一章節下載完畢都打印成功 print (title, ' 下載完畢 ' ) print ( ' over ' ) fp.close()
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
