Beautiful Soup 是一個可以從HTML或XML文件中提取數據的Python庫。
它能夠通過你喜歡的轉換器實現慣用的文檔導航,查找,修改文檔的方式。
在爬蟲開發中主要用的是Beautiful Soup的查找提取功能。
Beautiful Soup是第三方模塊,需要額外下載
下載命令:pip install bs4
安裝解析器:pip install lxml
from bs4 import BeautifulSoup # 創建BeautifulSoup對象 # 當數據來源為本地文件時 file = open("xxx.html") soup = BeautifulSoup(file, "lxml") # 當數據來源為網絡時 content = requests.get("url請求").text soup = BeautifulSoup(content, "lxml") #1 按標簽名查找標簽 soup.a # 獲取第一個匹配到的標簽 #2 tag屬性,a為例 soup.a.attrs # 獲取標簽中所有屬性名與對應屬性值的字典 soup.a.attrs["屬性名"] # 獲取屬性名對應的屬性值 soup.a.["屬性名"] # 獲取屬性名對應的屬性值的簡寫 soup.a.string # 獲取第一個匹配到的標簽的文字內容 soup.a.text # 獲取第一個匹配到的標簽以及其所包含的子標簽的所有內容 soup.a.contents[0] # tag的.content 屬性可以將tag的子節點以列表的方式輸出 .children:獲取Tag的所有子節點,返回一個生成器 for child in bs.body.children: print(child) .descendants:獲取Tag的所有子孫節點 .strings:如果Tag包含多個字符串,即在子孫節點中有內容,可以用此獲取,而后進行遍歷 .stripped_strings:與strings用法一致,只不過可以去除掉那些多余的空白內容 .parent:獲取Tag的父節點 .parents:遞歸得到父輩元素的所有節點,返回一個生成器 .previous_sibling:獲取當前Tag的上一個節點,屬性通常是字符串或空白,真實結果是當前標簽與上一個標簽之間的頓號和換行符 .next_sibling:獲取當前Tag的下一個節點,屬性通常是字符串或空白,真是結果是當前標簽與下一個標簽之間的頓號與換行符 .previous_siblings:獲取當前Tag的上面所有的兄弟節點,返回一個生成器 .next_siblings:獲取當前Tag的下面所有的兄弟節點,返回一個生成器 .previous_element:獲取解析過程中上一個被解析的對象(字符串或tag),可能與previous_sibling相同,但通常是不一樣的 .next_element:獲取解析過程中下一個被解析的對象(字符串或tag),可能與next_sibling相同,但通常是不一樣的 .previous_elements:返回一個生成器,可以向前訪問文檔的解析內容 .next_elements:返回一個生成器,可以向后訪問文檔的解析內容 .has_attr:判斷Tag是否包含屬性 #3 函數 soup.a.get_text() # 同soup.a.text soup.find("a") # 同soup.a soup.find("a",屬性名="屬性值") # 根據屬性值定位到第一個匹配到的標簽 注意: 若屬性名是 class 則需要在后面加個下划線,寫成 class_ 原型: find_all(name, attrs, recursive, text, **kwargs) 參數可以是方法、屬性、正則匹配式 soup.findall("a") # 獲取匹配到的所有標簽, 返回一個列表 soup.findall(["a", "b"]) # 可以獲取多種類的標簽 soup.findall("a", limit=2) # 獲取前2個匹配到的標簽 soup.select("選擇器") 選擇器包括: 標簽選擇器:soup.select("a") ID選擇器:soup.select("#xxx") 類選擇器:soup.select(".xxx") 層級選擇器:soup.select("div a") # 任意多級 soup.select("div > a") # 直系的一級 注意:select函數返回的永遠是一個列表 兄弟節點標簽查找 soup.select(".mnav ~ .bri") #