常用方法:
使用get_text()方法可以獲取當前標簽下的所有文字,包括其子標簽的,該方法可自動剔除其余的修飾標簽
若當前標簽的子節點是文字,可使用.string獲得其下的文本內容
高階方法:
若文本屬於此標簽的一個子節點、兄弟節點、父節點等,可靈活使用以下遍歷方法進行獲取:
1.下行遍歷
標簽樹的下行遍歷
.content 子節點列表,將tag所有兒子節點存入列表
.children子節點的迭代類型,與.contents類似用於循環遍歷兒子節點 .descendants 子孫節點的迭代類型,包含所有子孫節點,用於循環遍歷
測試代碼:
import requests
from bs4 import BeautifulSoup
r=requests.get("http://python123.io/ws/demo.html")
demo=r.text
soup=BeautifulSoup(demo,"html.parser")
print(soup.head) #head標簽內容
print(soup.head.contents) #head標簽子節點的內容
print(soup.body.contents) #body標簽子節點的內容
print(len(soup.body.contents)) #body標簽的子節點層數
print(soup.body.contents[1]) #
2.上行遍歷
.parent 節點的父親標簽
.parents 循環遍歷先輩節點
測試代碼:
import requests
from bs4 import BeautifulSoup
r=requests.get("http://python123.io/ws/demo.html")
demo=r.text
soup=BeautifulSoup(demo,"html.parser")
#print(soup.title.parent)
#print(soup.html.parent)
for parent in soup.a.parents:
if parent is None:
print(parent)
else:
print(parent.name)
3.平行遍歷
標簽樹的平行遍歷
.next_sibling 返回按照HTML文本順序的下一個平行節點標簽
.previous_sibling返回按照HTML文本順序的上一個平行節點標簽 .nex_siblings 迭代類型,返回按照HTML文本順序的后續所有平行節點標簽
.previous_siblings 迭代類型,返回按照HTML文本順序的前續所有平行節點標簽
import requests
from bs4 import BeautifulSoup
r=requests.get("http://python123.io/ws/demo.html")
demo=r.text
soup=BeautifulSoup(demo,"html.parser")
print(soup.a.next_sibling) #a的平行標簽
print(soup.a.next_sibling.next_sibling) #a標簽的下一個標簽的平行標簽
print(soup.a.previous_sibling) #a標簽的上一個標簽
print(soup.a.previous_sibling.previous_sibling) #a標簽的上一個標簽的平行標簽