Beautiful Soup - 查詢所有標題



本章將探討如何使用BeautifulSoup在HTML文件中查詢所有標題元素。HTML定義了從H1到H6的六種標題樣式,每種樣式的字型大小遞減。不同的頁面部分使用合適的標籤,例如主標題、章節標題、主題等。讓我們用兩種不同的方法使用find_all()方法來提取HTML文件中的所有標題元素。

我們將使用以下HTML指令碼(儲存為index.html)作為本章程式碼示例中的基礎:

<html>
   <head>
      <title>BeautifulSoup - Scraping Headings</title>
   </head>
   <body>
      <h2>Scraping Headings</h2>
      <b>The quick, brown fox jumps over a lazy dog.</b>
      <h3>Paragraph Heading</h3>
      <p>DJs flock by when MTV ax quiz prog.</p>
      <h3>List heading</h3>
      <ul>
         <li>Junk MTV quiz graced by fox whelps.</li>
         <li>Bawds jog, flick quartz, vex nymphs.</li>
      </ul>
   </body>
</html>

示例1

在這種方法中,我們收集解析樹中的所有標籤,並檢查每個標籤的名稱是否在所有標題標籤列表中找到。

from bs4 import BeautifulSoup

fp = open('index.html')

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

headings = ['h1','h2','h3', 'h4', 'h5', 'h6']
tags = soup.find_all()
heads = [(tag.name, tag.contents[0]) for tag in tags if tag.name in headings]
print (heads)

這裡,headings是所有標題樣式h1到h6的列表。如果標籤的名稱是其中任何一個,則該標籤及其內容將被收集到名為heads的列表中。

輸出

[('h2', 'Scraping Headings'), ('h3', 'Paragraph Heading'), ('h3', 'List heading')]

示例2

您可以將正則表示式傳遞給find_all()方法。看看下面的正則表示式。

re.compile('^h[1-6]$')

此正則表示式查詢所有以h開頭,h之後有一個數字,然後在數字之後結束的標籤。讓我們在下面的程式碼中將其用作find_all()方法的引數:

from bs4 import BeautifulSoup
import re

fp = open('index.html')

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

tags = soup.find_all(re.compile('^h[1-6]$'))
print (tags)

輸出

[<h2>Scraping Headings</h2>, <h3>Paragraph Heading</h3>, <h3>List heading</h3>]
廣告