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() --->獲取節點內的所有文本