1. 程式人生 > >BeautifulSoup庫之find_all函數

BeautifulSoup庫之find_all函數

mit 並不是 樹形 方便 lin 字符 正則表達式的使用 http 方式

  BeautifulSoup將復雜的HTML文檔轉換成一個復雜的樹形結構.每個節點都是Python對象.所有對象可以歸納為四種:Tag , NavigableString , BeautifulSoup , Comment .

    1.Tag對象最重要的屬性:Name:標簽的名字;attributes:屬性(用class指代)

    2.BeautifulSoup 對象表示的是一個文檔的全部內容.大部分時候,可以把它當作 Tag 對象,它支持 遍歷文檔樹 和 搜索文檔樹 中描述的大部分的方法.因為 BeautifulSoup 對象並不是真正的HTML或XML的tag,所以它沒有name和attribute屬性.但有時查看它的 .name

屬性是很方便的,所以 BeautifulSoup 對象包含了一個值為 “[document]” 的特殊屬性 .name

    3.字符串常被包含在tag內.Beautiful Soup用 NavigableString 類來包裝tag中的字符串,如果想在Beautiful Soup之外使用 NavigableString 對象,需要調用 unicode() 方法,將該對象轉換成普通的Unicode字符串,否則就算Beautiful Soup已方法已經執行結束,該對象的輸出也會帶有對象的引用地址.這樣會浪費內存.

    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$")) #正則表達式的使用

    

---恢復內容結束---

BeautifulSoup庫之find_all函數