1. 節點選擇器
from bs4 import BeautifulSoup
html = """
<html>
<head><title>The test!</title></head>
<body>
<ol>
<li><a href="https://blog.csdn.net/nanhuaibeian/article/details/89020249" rel="nofollow" target="_blank">入門</a></li>
<li><a href="https://blog.csdn.net/nanhuaibeian/article/details/89075453" rel="nofollow" target="_blank">使用urllib(request)</a></li>
<li><a href="https://blog.csdn.net/nanhuaibeian/article/details/89163384" rel="nofollow" target="_blank">使用urllib(error)</a></li>
<li><a href="https://blog.csdn.net/nanhuaibeian/article/details/89166027" rel="nofollow" target="_blank">使用requests</a></li>
<li><a href="https://blog.csdn.net/nanhuaibeian/article/details/89041626" rel="nofollow" target="_blank">下載一隻貓</a></li>
<li><a href="https://blog.csdn.net/nanhuaibeian/article/details/89048805" rel="nofollow" target="_blank">翻譯文本</a></li>
</ol>
"""
soup = BeautifulSoup(html,'lxml')
# 利用name屬性獲取節點的名稱
print(soup.head.name)
# 調用attrs獲取所有屬性
print(soup.a.attrs)
# 獲取某個屬性值
print(soup.a['href']) # print(soup.a.attrs['href'])
# 獲取文本內容,選擇第一a節點,獲取的文本也是第一個a節點裏面的文本
print(soup.a.string)
2. 方法選擇器
- find_all()
findall(name,attrs,recursive,text,**kwargs)
顧名思義,就是查詢所有符合條件的元素。給他傳入一些屬性或文本,就可以得到符合條件的元素,返回的是一個列表。
name:
soup = BeautifulSoup(html,'lxml')
print(soup.find_all(name='li'))
這裏調用find_all()方法,傳入name參數,參數值爲li。即查詢出所有的li節點,返回結果時列表類型.
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'lxml')
# 查詢出所有的li節點後,繼續查內部的a節點
for each in soup.find_all(name='li'):
print(each.find_all(name='a'))
print(each.find_all(name='a')[0].string) # 查詢文本
print(each.find_all(name='a')[0]['href']) # 查詢屬性href對應的值
attrs:
傳入一些屬性來查詢
soup = BeautifulSoup(html,'lxml')
for each in soup.find_all(name='li'):
# 查詢屬性href包含"/details/89041626"的元素
print(each.find_all(href=re.compile("/details/89041626")))
text:
text參數可用來匹配節點的文本,傳入的形式可以是字符串,可以是正則表達式對象
soup = BeautifulSoup(html,'lxml')
for each in soup.find_all(name='li'):
# 傳入text參數, 查詢內部包含“貓”的文本信息
print(each.find_all(text=re.compile('貓')))