BeautifulSoup庫之find_all函式
BeautifulSoup將複雜的HTML文件轉換成一個複雜的樹形結構.每個節點都是Python物件.所有物件可以歸納為四種:Tag , NavigableString , BeautifulSoup , Comment .
1.Tag物件最重要的屬性:Name:標籤的名字;attributes:屬性(用class指代)
2.BeautifulSoup 物件表示的是一個文件的全部內容.大部分時候,可以把它當作 Tag 物件,它支援 遍歷文件樹 和
3.字串常被包含在tag內.Beautiful Soup用 NavigableString 類來包裝tag中的字串,如果想在Beautiful Soup之外使用 NavigableString
4.Comment 物件是一個特殊型別的 NavigableString 物件,用來完成文字註釋.
既然BeautifulSoup將html文件轉換為複雜的樹形結構,然後來介紹如何遍歷html文件樹:
子節點:.contents將子節點以列表的方式輸出(含內容);.children返回子節點的列表生成器,可以遍歷輸出;contents和children只查詢第一個子節點,而.descendants可對所有子節點進行遞迴迴圈;
父節點:.parent 屬性來獲取某個標籤或字串的父節點;.parents 屬性可以遞迴得到元素的所有父輩節點
兄弟節點:.next_sibling獲取下一個兄弟節點; .previous_sibling獲取前一個兄弟節點,同樣加s返回所有前或者後兄弟的列表生成器,可遍歷輸出.
接下來介紹find_all()函式,首先要明確find_dall總返回一個列表,如果沒有找到則返回空:BeautifulSoup提供了強大的搜尋函式find 和findall,這裡的兩個方法(findAll和 find)僅對Tag物件以及,頂層剖析物件有效。其標準引用形式為:findAll(name, attrs, recursive, text, limit, **kwargs)
1.通過標籤名查詢:
1 for link in soup.find_all('a'): #soup.find_all返回的為列表 2 print(link.get('href'))
2.通過標籤屬性值查詢:
1 pid=soup.findall('p',id='hehe') #通過tag的id屬性搜尋標籤
#print(soup.find_all(attrs={'class':'footer'}))
3.通過re正則表示式搜尋tag標籤內容:
pid=soup.findAll(id=re.compile("he$")) #正則表示式的使用
---恢復內容結束---