Beautiful Soup - find_all_previous() 方法



方法描述

Beautiful Soup 中的 find_all_previous() 方法会从当前 PageElement 向文档的前面查找,并找到所有符合给定条件且出现在当前元素之前的 PageElement。它返回一个包含在文档中出现在当前标签之前的 PageElement 的 ResultSet。与所有其他 find 方法一样,此方法具有以下语法:

语法

find_previous(name, attrs, string, limit, **kwargs)

参数

  • name - 标签名称过滤器。

  • attrs - 属性值过滤器字典。

  • string - 具有特定文本的 NavigableString 过滤器。

  • limit - 找到指定数量的结果后停止查找。

  • kwargs - 属性值过滤器字典。

返回值

find_all_previous() 方法返回一个包含 Tag 或 NavigableString 对象的 ResultSet。如果 limit 参数为 1,则该方法等效于 find_previous() 方法。

示例 1

在此示例中,显示了出现在第一个 input 标签之前的每个对象的 name 属性。

from bs4 import BeautifulSoup

fp = open("index.html")
soup = BeautifulSoup(fp, 'html.parser')
tag = soup.find('input')
for t in tag.find_all_previous():
   print (t.name)

输出

form
h1
body
title
head
html

示例 2

在正在考虑的 HTML 文档 (index.html) 中,有三个 input 元素。使用以下代码,我们打印 <input> 标签(nm 属性为 marks)之前所有前导标签的标签名称。为了区分它之前的两个 input 标签,我们还打印了 attrs 属性。请注意,其他标签没有任何属性。

from bs4 import BeautifulSoup

fp = open("index.html")
soup = BeautifulSoup(fp, 'html.parser')
tag = soup.find('input', {'name':'marks'})
pretags = tag.find_all_previous()
for pretag in pretags:
   print (pretag.name, pretag.attrs)

输出

input {'type': 'text', 'id': 'age', 'name': 'age'}
input {'type': 'text', 'id': 'nm', 'name': 'name'}
form {}
h1 {}
body {}
title {}
head {}
html {}

示例 3

BeautifulSoup 对象存储整个文档的树。它没有任何前导元素,如下例所示:

from bs4 import BeautifulSoup

fp = open("index.html")
soup = BeautifulSoup(fp, 'html.parser')
tags = soup.find_all_previous()
print (tags)

输出

[]
广告

© . All rights reserved.