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 属性返回最终大于号的位置。

广告
© . All rights reserved.