一、介紹

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下的直接子節點,子標籤
'''