Beautiful Soup - find_previous_siblings() 方法



方法描述

Beautiful Soup 包中的 find_previous_siblings() 方法返回文件中在此 PAgeElement 之前出現的所有與給定條件匹配的兄弟節點。

語法

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

引數

  • name − 標籤名稱過濾器。

  • attrs − 屬性值過濾器字典。

  • string − 具有特定文字的 NavigableString 過濾器。

  • limit − 找到這麼多結果後停止查詢。

  • kwargs − 屬性值過濾器字典。

返回值

find_previous_siblings() 方法返回一個包含 PageElements 的 ResultSet。

示例 1

讓我們為此目的使用以下 HTML 程式碼段:

<p>
   <b>
      Excellent
   </b>
   <i>
      Python
   </i>
   <u>
      Tutorial
   </u>
</p>

在下面的程式碼中,我們嘗試查詢 <> 標籤的所有兄弟節點。在用於抓取的 HTML 字串中,同一級別還有兩個標籤。

from bs4 import BeautifulSoup
soup = BeautifulSoup("<p><b>Excellent</b><i>Python</i><u>Tutorial</u></p>", 'html.parser')

tag1 = soup.find('u')
print ("previous siblings:")
for tag in tag1.find_previous_siblings():
   print (tag)

輸出

<i>Python</i>
<b>Excellent</b>

示例 2

網頁 (index.html) 包含一個具有三個輸入元素的 HTML 表單。我們找到一個 id 屬性為 marks 的元素,然後找到其之前的兄弟節點。

from bs4 import BeautifulSoup

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

tag = soup.find('input', {'id':'marks'})
sibs = tag.find_previous_sibling()
print (sibs)

輸出

[<input id="age" name="age" type="text"/>, <input id="nm" name="name" type="text"/>]

示例 3

HTML 字串有兩個 <p> 標籤。我們找出 id 屬性為 id1 的標籤之前的兄弟節點。

html = '''
<p><b>Excellent</b><p>Python</p><p id='id1'>Tutorial</p></p>
'''
from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'html.parser')
tag = soup.find('p', id='id1')
ptags = tag.find_previous_siblings()
for ptag in ptags:
   print ("Tag: {}, Text: {}".format(ptag.name, ptag.text))

輸出

Tag: p, Text: Python
Tag: b, Text: Excellent
廣告