from bs4 import BeautifulSoup html = """ <html> <head><title>標題</title></head> <body> <p class="story" name="dromouse">從前有三個小姐妹,她們的名字是 <a href="http://example.com/elsie" class="sister" id="link1"><!--Elseie--></a>, <a href="http://example.com/lacie" class="sister" id="link2"><b>Lacie</b></a>, <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>; 她們生活在一個井的下面</p> <p class="story">...</p> </body> </html> """ # find_all方法 傳入參數 屬性="..." , name=標簽名 class加_因為是關鍵詞 soup = BeautifulSoup(html, 'lxml') # for a in soup.find_all(name='a'): # print(a) # for a in soup.find_all(class_='sister'): # print(a) # 使用attrs text匹配文本 例如 text="Lacie" 也可以傳入正則表達式 # for a in soup.find_all(attrs={'class': 'sister'}): # print(a) # ######################################find方法####################################################### # 返回單個 用法同上 # print(soup.find(name="p")) # 祖先parents 唯一父元素parent 只能先指定一個元素來進行查找 元組不行 # print(soup.find_all(name='a').find_parent(name="p"))# 這不可行 # print(soup.find(name='a').find_parent(name="p")) # print(soup.find(name='a').find_parents()) # 前一個兄弟節點 后一個兄弟節點 print(soup.find(name='a').find_next_sibling()) print(soup.find(id='link2').find_previous_sibling()) # 前面的兄弟節點 后面的兄弟節點 返回元組 print(soup.find(name='a').find_next_siblings()) print(soup.find(id='link3').find_previous_siblings()) # 前一個元素 后一個元素 print(soup.find(name='a').find_next()) print(soup.find(id='link3').find_previous()) # 查到的是b 因為 <a><b></b></a> a->b這樣的結構 在他前面是b元素 # 前面的所有元素 后面的所有元素 返回元組 print(soup.find(name='a').find_all_next()) print(soup.find(id='link3').find_all_previous()) # #######################################selectcss選擇器# ################################################ # 查找class為sister的 返回的是結果元組 print(soup.select(".sister")) print(soup.select("#link1")) # id查詢 返回的也是元組 print(soup.select("#link2 b")) # 返回下級元素 # 嵌套查詢 就是在已經查出的結果里面查詢 for p in soup.select('p'): print(p.select('a')) # 獲取屬性 attrs for a in soup.select('a'): print(a.attrs['id']) # 獲取文本 get_text() for b in soup.select('b'): print(b.get_text())