網(wǎng)站首頁 編程語言 正文
一、模塊簡介
Beautiful Soup 是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫.它能夠通過你喜歡的轉(zhuǎn)換器實(shí)現(xiàn)慣用的文檔導(dǎo)航,查找,修改文檔的方式.Beautiful Soup會幫你節(jié)省數(shù)小時(shí)甚至數(shù)天的工作時(shí)間.
二、方法利用
1、引入模塊
# 引入
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a class="sister" id="link1">Elsie</a>,
<a class="sister" id="link2">Lacie</a> and
<a class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')
四種解析器
2、幾個(gè)簡單的瀏覽結(jié)構(gòu)化數(shù)據(jù)的方法
#獲取Tag,通俗點(diǎn)就是HTML中的一個(gè)個(gè)標(biāo)簽
#獲取Tag,通俗點(diǎn)就是HTML中的一個(gè)個(gè)標(biāo)簽
soup.title # 獲取整個(gè)title標(biāo)簽字段:<title>The Dormouse's story</title>
soup.title.name # 獲取title標(biāo)簽名稱 :title
soup.title.parent.name # 獲取 title 的父級標(biāo)簽名稱:head
soup.p # 獲取第一個(gè)p標(biāo)簽字段:<p class="title"><b>The Dormouse's story</b></p>
soup.p['class'] # 獲取第一個(gè)p中class屬性值:title
soup.p.get('class') # 等價(jià)于上面
soup.a # 獲取第一個(gè)a標(biāo)簽字段
soup.find_all('a') # 獲取所有a標(biāo)簽字段
soup.find(id="link3") # 獲取屬性id值為link3的字段
soup.a['class'] = "newClass" # 可以對這些屬性和內(nèi)容等等進(jìn)行修改
del bs.a['class'] # 還可以對這個(gè)屬性進(jìn)行刪除
soup.find('a').get('id') # 獲取class值為story的a標(biāo)簽中id屬性的值
soup.title.string # 獲取title標(biāo)簽的值 :The Dormouse's story
三、具體利用
1、獲取擁有指定屬性的標(biāo)簽
方法一:獲取單個(gè)屬性
soup.find_all('div',id="even") # 獲取所有id=even屬性的div標(biāo)簽
soup.find_all('div',attrs={'id':"even"}) # 效果同上
方法二:
soup.find_all('div',id="even",class_="square") # 獲取所有id=even并且class=square屬性的div標(biāo)簽
soup.find_all('div',attrs={"id":"even","class":"square"}) # 效果同上
2、獲取標(biāo)簽的屬性值
方法一:通過下標(biāo)方式提取
for link in soup.find_all('a'):
print(link['href']) //等同于 print(link.get('href'))
方法二:利用attrs參數(shù)提取
for link in soup.find_all('a'):
print(link.attrs['href'])
3、獲取標(biāo)簽中的內(nèi)容
divs = soup.find_all('div') # 獲取所有的div標(biāo)簽
for div in divs: # 循環(huán)遍歷div中的每一個(gè)div
a = div.find_all('a')[0] # 查找div標(biāo)簽中的第一個(gè)a標(biāo)簽
print(a.string) # 輸出a標(biāo)簽中的內(nèi)容
如果結(jié)果沒有正確顯示,可以轉(zhuǎn)換為list列表
4、stripped_strings
去除\n換行符等其他內(nèi)容 stripped_strings
divs = soup.find_all('div')
for div in divs:
infos = list(div.stripped_strings) # 去掉空格換行等
bring(infos)
四、輸出
1、格式化輸出prettify()
prettify() 方法將Beautiful Soup的文檔樹格式化后以Unicode編碼輸出,每個(gè)XML/HTML標(biāo)簽都獨(dú)占一行
markup = '<a >I linked to <i>example.com</i></a>'
soup = BeautifulSoup(markup)
soup.prettify()
# '<html>\n <head>\n </head>\n <body>\n <a >\n...'
print(soup.prettify())
# <html>
# <head>
# </head>
# <body>
# <a >
# I linked to
# <i>
# example.com
# </i>
# </a>
# </body>
# </html>
2、get_text()
如果只想得到tag中包含的文本內(nèi)容,那么可以調(diào)用 get_text() 方法,這個(gè)方法獲取到tag中包含的所有文版內(nèi)容包括子孫tag中的內(nèi)容,并將結(jié)果作為Unicode字符串返回:
markup = '<a >\nI linked to <i>example.com</i>\n</a>'
soup = BeautifulSoup(markup)
soup.get_text()
u'\nI linked to example.com\n'
soup.i.get_text()
u'example.com'
原文鏈接:https://blog.csdn.net/Thunderclap_/article/details/128948135
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2022-04-23 elementui el-pagination 分頁組件封裝
- 2022-04-09 MFC模擬實(shí)現(xiàn)自定義消息發(fā)送_C 語言
- 2022-03-21 SQL查詢連續(xù)登陸7天以上的用戶的方法實(shí)現(xiàn)_MsSql
- 2022-10-16 Python實(shí)現(xiàn)自定義Jupyter魔法命令_python
- 2022-09-09 C++中vector<vector<int>?>的基本使用方法_C 語言
- 2022-05-27 Android實(shí)現(xiàn)拼圖游戲_Android
- 2022-09-26 你了解Redis事務(wù)嗎_Redis
- 2022-05-13 深度優(yōu)先搜索之八皇后問題
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支