爬蟲之Beautiful Soup4(bs4)的基本使用


 

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")  #

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM