一、搜索关键字相关
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/n/193293.html