一、搜索關鍵字相關
soup.find_all是BeautifulSoup庫的核心函數之一,用於在HTML文檔中查找所有符合指定搜索條件的標籤,返回一個列表。其常用的關鍵字有tag name,attribute,text,recursive等。
首先,利用tag name來搜索。例如,我們要查找網頁中所有的鏈接標籤,可以使用以下代碼:
from bs4 import BeautifulSoup import requests url = 'https://www.baidu.com/' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') links = soup.find_all('a')
通過以上代碼,我們可以得到當前頁面中所有的鏈接列表。如果我們要查找特定屬性的標籤,可以使用attribute關鍵字。例如,我們要查找class為「content」標籤,可以使用以下代碼:
contents = soup.find_all(class_='content')
如果我們要查找帶有特定文本內容的標籤,可以使用text關鍵字。例如,我們要查找包含「百度一下」文本的按鈕標籤,可以使用以下代碼:
buttons = soup.find_all('button', text='百度一下')
最後一個常用的關鍵字是recursive。如果參數為False,則只搜索直接子節點。例如,我們要查找第一層子節點中所有的段落標籤,可以使用以下代碼:
first_level_p = soup.find_all('p', recursive=False)
二、soup.find_all與soup.find的區別
soup.find_all和soup.find是兩個常用的搜索函數。不同之處在於,soup.find只返回第一個符合條件的標籤,而soup.find_all返回所有符合條件的標籤組成的列表。
例如,我們要查找第一個p標籤,可以使用以下代碼:
first_p = soup.find('p')
而如果我們要查找所有p標籤,可以使用以下代碼:
all_p = soup.find_all('p')
三、選取指定標籤及其所有孩子標籤
由於soup.find_all返回的是標籤列表,我們可以對列表中的每個標籤再做進一步處理。如果我們想要選取某個標籤及其所有孩子標籤,可以使用parent和descendants屬性。
parent屬性返回該標籤的一級父標籤,例如:
first_level_parents = [tag.parent for tag in all_p]
descendants屬性返回該標籤的所有子孫標籤,例如:
all_descendants = [tag.descendants for tag in all_p]
需要注意的是,descendants返回的是所有子孫標籤的生成器,如果要得到所有子孫標籤的列表,需要轉換。
四、根據標籤屬性值排序
在實際操作中,我們有時候需要根據標籤屬性值進行排序,可以使用sort函數。例如,我們要根據鏈接文本的長度對鏈接進行排序:
links.sort(key=lambda x: len(x.text))
以上代碼會將所有鏈接按照文本長度從小到大排序。
五、獲取標籤屬性值
我們可以使用tag[‘attr_name’]獲取標籤的屬性值。例如,獲取所有鏈接的href屬性值:
link_hrefs = [link['href'] for link in links]
以上代碼將所有鏈接的href屬性值存儲在列表中。
六、總結
soup.find_all是BeautifulSoup庫中最常用的函數之一,可以根據多個關鍵字搜索HTML文檔中的標籤。在搜索到標籤列表後,我們可以利用標籤的屬性和相關屬性獲取特定信息。除此之外,我們還可以使用parent和descendants屬性,以及sort函數進行標籤的進一步處理。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/193293.html