一、介紹
Beautiful Soup 主要是用來解析提取 HTML 和 XML 檔案中的資料。
現在官網推薦使用 Beautiful Soup 4 ,已經被移植到了BS4中。
安裝 Beautiful Soup:pip instal beautifulsoup4
使用格式:
例項化 Beautifulsoup 傳入被 解析的 HTML 文件內容和解析器,得到一個物件。
from bs4 import Beautifulsoup
soup = Beautifulsoup(html_doc, 'html.parser')
# 引數:
-html_doc:被解析的html文件內容
-html.parser:解析器
解析器:
解析器 | 使用方法 | 優勢 | 劣勢 |
---|---|---|---|
Python標準庫 | BeautifulSoup(markup, "html.parser") |
Python的內建標準庫執行速度適中文件容錯能力強 | Python 2.7.3 or 3.2.2)前 的版本中文件容錯能力差 |
lxml HTML 解析器 | BeautifulSoup(markup, "lxml") |
速度快文件容錯能力強 | 需要安裝C語言庫 |
lxml XML 解析器 | BeautifulSoup(markup, ["lxml", "xml"])``BeautifulSoup(markup, "xml") |
速度快唯一支援XML的解析器 | 需要安裝C語言庫 |
html5lib | BeautifulSoup(markup, "html5lib") |
最好的容錯性以瀏覽器的方式解析文件生成HTML5格式的文件 | 速度慢不依賴外部擴充套件 |
二、遍歷文件樹
遍歷文件樹就是直接通過標籤名字選擇,特點是選擇速度快,但如果存在多個相同的標籤則只能返回第一個。
用法:
from bs4 import Beautifulsoup
soup = Beautifulsoup(html_doc, 'html.parser')
物件 = soup.body.a # 查詢最開始第一個body標籤下的第一個a標籤
物件.name # 獲取標籤的名字
物件.attrs # 獲取標籤的所有屬性
物件.get(屬性名) # 獲取標籤指定屬性
物件.text # 獲取標籤的文字內容(子子孫孫都拼接在一起的)
物件.get_text() # 和上面一樣
物件.string # 當前標籤下有文字才取出來,否則全是None
物件.strings # 子子孫孫的內容都放大生成器中
三、搜尋文件樹
搜尋文件樹是通過主要的兩個方法 find()
和 find_all()
去文件中查詢指定標籤。
五種過濾器
1、字串:
from bs4 import Beautifulsoup
soup = Beautifulsoup(html_doc, 'html.parser')
soup.find_all('a') # 查詢所有的a標籤
2、正則表示式
import re
soup.find_all(re.compile('^b')) # 查找出所有以b開頭的標籤
3、列表
soup.find_all(['a', 'b']) # 找到所有的a標籤和b標籤
4、True/False
soup.find_all(name=True) # 匹配有name屬性的標籤
5、方法
如果沒有合適的過濾器,就可以定義一個方法只接收一個元素引數,返回 True 表示匹配到並找到,否則 False
# 查詢有類屬性,沒有id屬性的標籤
def fun(tag):
return tag.has_attr('class') and not tag.has_attr('id')
soup.find_all(fun)
CSS選擇器
使用方法和CSS選擇器一樣,用css選擇器的格式去找標籤
格式:
soup.select('css選擇器') # 返回列表
'''
#id
.class
#id a ——>匹配對應id下的所有a標籤(子子孫孫)
#id>a ——>匹配對應id下的直接子節點,子標籤
'''