Beautiful Soup - 獲取標籤位置



Beautiful Soup 中的 Tag 物件擁有兩個有用的屬性,它們提供關於其在HTML文件中位置的資訊。它們是:

sourceline - 找到標籤的行號

sourcepos - 標籤在其所在行的起始索引。

這些屬性由 Python 自帶的解析器 html.parser 和 html5lib 解析器支援。使用 lxml 解析器時,它們不可用。

在下面的示例中,使用 html.parser 解析 HTML 字串,我們找到 `

` 標籤在 HTML 字串中的行號和位置。

示例

html = '''
<html>
   <body>
      <p>Web frameworks</p>
      <ul>
      <li>Django</li>
      <li>Flask</li>
      </ul>
      <p>GUI frameworks</p>
      <ol>
      <li>Tkinter</li>
      <li>PyQt</li>
      </ol>
   </body>
</html>
'''
from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'html.parser')

p_tags = soup.find_all('p')
for p in p_tags:
   print (p.sourceline, p.sourcepos, p.string)

輸出

4 0 Web frameworks
9 0 GUI frameworks

對於 html.parser,這些數字表示初始小於號的位置,在本例中為 0。使用 html5lib 解析器時略有不同。

示例

html = '''
<html>
   <body>
      <p>Web frameworks</p>
      <ul>
      <li>Django</li>
      <li>Flask</li>
      </ul>
      <p>GUI frameworks</p>
      <ol>
      <li>Tkinter</li>
      <li>PyQt</li>
      </ol>
   </body>
</html>
'''
from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'html5lib')

li_tags = soup.find_all('li')
for l in li_tags:
   print (l.sourceline, l.sourcepos, l.string)

輸出

6 3 Django
7 3 Flask
11 3 Tkinter
12 3 PyQt

使用 html5lib 時,sourcepos 屬性返回最終大於號的位置。

廣告