1.beatuifulSoup 基本用法
beautifulSoup(簡稱bs4)是python的一個第三方庫,用于解析html和xml文檔中提取數據的python庫。它能夠將復雜的文檔轉化為樹形結構,方便快速定位和提取所需數據以及查找和修改,常常與爬蟲框架如requests結合使用:
一下是bs4的核心功能的介紹:
- 四大對象類型
tag:html、xml中的標簽,如div和a標簽
NavigableString:標簽內的文本內容
BeautifulSoup:表示整個文檔樹
Comment:Html中的注釋部分 - 解析器對比
解析器 | 優勢 | 劣勢 |
---|---|---|
html | 內置無需安裝 | 速度比較慢,容錯性一般 |
lxml | 速度快容錯性強 | 需要額外安裝依賴 |
html5lib | 遵循html5標準容錯性最強 | 速度最慢,需要額外安裝 |
- 安裝與導入
命令:
pip install beautifulsoup4
執行結果
還需要安裝解析器(如lxml或者html.parse)
命令:
pip install lxml
導包使用
- 使用BeautifulSoup流程
①導入BeautifulSoup模塊
②創建BeautifulSoup對象
③使用標簽名稱查找元素
④使用css選擇器查找元素
⑤獲取元素的文本內容 - BeautifulSoup基本用法
①初始化與解析
a. 字符串解析
from bs4 import BeautifulSoup# 字符串解析,相當于把需要解析的內容,不需要放到html中,直接放在str中
html_doc = '''
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>python</title></head><body><div class="name" id="title"><h1> python 學習</h1><p> 爬蟲 </p><a href="https://www.python.org/"></a></div></body>
</html>
'''
# 設置解析器進行解析
soup = BeautifulSoup(html_doc, 'html.parser')
print(soup)
b. 文件解析(從html文件中進行解析)
from bs4 import BeautifulSoup# 文件解析
with open('bs.html', 'r', encoding='utf8') as f:soup = BeautifulSoup(f, 'html.parser')print(soup)
c. URL獲取HTML并解析(使用爬蟲腳本發送請求的時候就已經可以進行解析了)
from bs4 import BeautifulSoup
import requests# url獲取html并解析
url = 'http://www.baidu.com'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 ''Safari/537.39996'
}
response = requests.get(url= url, headers=headers)
soup = BeautifulSoup(response.text, 'lxml')
print(soup)
②訪問元素
例如:獲取字符串中的某個標簽,通過標簽名來進行訪問
from bs4 import BeautifulSoup# 字符串解析,相當于把需要解析的內容,不需要放到html中,直接放在str中
html_doc = '''
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>python</title></head><body><div class="name" id="title"><h1> python 學習</h1><p> 爬蟲 </p><a href="https://www.python.org/">路徑</a></div></body>
</html>
'''
# 設置解析器進行解析
soup = BeautifulSoup(html_doc, 'html.parser')
# 1.直接訪問子標簽
h1_data = soup.h1
p_data = soup.p
div_data = soup.div
print(soup)
print(h1_data)
print(p_data)
print(div_data)
# 2.訪問標簽的標簽名、標簽值
# (先獲取h1標簽)
title = soup.h1
# 獲取標簽名
name= title.name
print(name)
# 獲取標簽值
str = title.string
print(str)
# 獲取某個父標簽下的某個子標簽下的內容(嵌套訪問:父親找兒子的某個內容)
print(soup.body.div.a.string)