一、介紹
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下的直接子節點,子標簽
'''
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/295531.html
標籤:Python
