banner
AndrewTsui

AndrewTsui

BeautifulSoup 學習筆記

Beautiful Soup 的基礎使用#

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')

節點選擇器#

直接調用節點的名稱,再調用 string,就可以獲取節點內的文本

soup.a.string   --->獲取第一個 a 標籤的文本,返回文本字符串
soup.a    --->獲取第一個 a 標籤的 html 代碼(Tag 類型),可嵌套選擇
soup.a.attrs['class']
soup.a['class'] --->獲取屬性;屬性唯一,返回字符串;屬性不唯一,返回列表;

關聯選擇#

  • 子節點
soup.a.contents   --->返回列表
soup.a.children  --->返回生成器
  • 子孫節點
soup.a.descendands  --->返回生成器
  • 父節點
soup.a.parent  --->返回第一個 a 節點的父節點
  • 祖先節點
soup.a.parents  --->返回生成器
  • 兄弟節點
soup.a.next_sibling  --->返回下一個兄弟節點
soup.a.previous_sibling  --->返回上一個兄弟節點
soup.a.next_siblings  --->返回後面的兄弟節點,生成器類型
soup.a.previous_siblings  --->返回前面的兄弟節點,生成器類型

以上方法返回結果是單個節點,可直接調用 string、attrs 等屬性獲得其文本和屬性內容;
如果返回的是多個節點的生成器,則可轉化為列表後,取出某個元素然後再調用 string、attrs 等屬性;

方法選擇器#

find_all(name, attrs, recusive, text, **kwargs): 查詢所有符合條件的元素

  • name :根據節點名查詢,返回列表,Tag 類型
    • attrs:根據屬性來查詢,返回列表,Tag 類型
soup.find_all(attrs={'id':'list-1'})
soup.find_all(id='list-1')
soup.find_all(class_='element')  --->class為python關鍵字,後邊需加'_'
  • text:該參數可用來匹配節點的文本,傳入形式可以是字符串,也可以是正則表達式對象
soup.find_all(text=re.compile('link')) -->返回所有匹配正則表達式的節點文本組成的列表

find(name, attrs, recusive, text, **kwargs):查詢第一個符合條件的元素,用法與find_all() 相同,返回的是單個 Tag 類型

CSS 選擇器#

調用 select() 方法,傳入相應的 CSS 選擇器即可:soup.select('CSS 選擇器語句') 返回列表,元素為 Tag 類型

1.支持嵌套選擇
for ul in soup.select('ul'):
	print(ul.select('li'))
            
2.獲取屬性
for ul in soup.select('ul'):
	content = ul['id']
	content = ul.attrs['id']

3.獲取文本
for ul in soup.select('ul'):
	content = ul.string       --->獲取直系文本
	content = ul.get_text()   --->獲取節點內的所有文本
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。