BeautifulSoup - 從 HTML 中抓取連結



在從網站資源中抓取和分析內容時,您經常需要提取某個頁面包含的所有連結。在本章中,我們將瞭解如何從 HTML 文件中提取連結。

HTML 使用錨標記 <a> 插入超連結。錨標記的 href 屬性允許您建立連結。它使用以下語法:

<a href=="web page URL">hypertext</a>

使用 find_all() 方法,我們可以收集文件中的所有錨標記,然後列印每個標記的 href 屬性的值。

在下面的示例中,我們提取了 Google 首頁上找到的所有連結。我們使用 requests 庫來收集 https://google.com 的 HTML 內容,將其解析為 soup 物件,然後收集所有 <a> 標籤。最後,我們列印 href 屬性。

示例

from bs4 import BeautifulSoup
import requests

url = "https://www.google.com/"
req = requests.get(url)

soup = BeautifulSoup(req.content, "html.parser")

tags = soup.find_all('a')
links = [tag['href'] for tag in tags]
for link in links:
   print (link)

以下是執行上述程式時部分輸出:

輸出

https://www.google.co.in/imghp?hl=en&tab=wi
https://maps.google.co.in/maps?hl=en&tab=wl
https://play.google.com/?hl=en&tab=w8
https://www.youtube.com/?tab=w1
https://news.google.com/?tab=wn
https://mail.google.com/mail/?tab=wm
https://drive.google.com/?tab=wo
https://www.google.co.in/intl/en/about/products?tab=wh
http://www.google.co.in/history/optout?hl=en
/preferences?hl=en
https://#/ServiceLogin?hl=en&passive=true&continue=https://www.google.com/&ec=GAZAAQ
/advanced_search?hl=en-IN&authuser=0
https://www.google.com/url?q=https://io.google/2023/%3Futm_source%3Dgoogle-hpp%26utm_medium%3Dembedded_marketing%26utm_campaign%3Dhpp_watch_live%26utm_content%3D&source=hpp&id=19035434&ct=3&usg=AOvVaw0qzqTkP5AEv87NM-MUDd_u&sa=X&ved=0ahUKEwiPzpjku-z-AhU1qJUCHVmqDJoQ8IcBCAU

但是,HTML 文件可能具有不同協議方案的超連結,例如用於連結到電子郵件 ID 的 mailto: 協議,用於連結到電話號碼的 tel: 方案,或用於連結到具有 file:// URL 方案的本地檔案的連結。在這種情況下,如果我們有興趣提取具有 https:// 方案的連結,我們可以透過以下示例來實現。我們有一個包含不同型別超連結的 HTML 文件,其中僅提取了具有 https:// 字首的連結。

html = '''
<p><a href="https://tutorialspoint.tw">Web page link </a></p>
<p><a href="https://www.example.com">Web page link </a></p>
<p><a href="mailto:nowhere@mozilla.org">Email link</a></p>
<p><a href="tel:+4733378901">Telephone link</a></p>
'''
from bs4 import BeautifulSoup
import requests

soup = BeautifulSoup(html, "html.parser")
tags = soup.find_all('a')
links = [tag['href'] for tag in tags]
for link in links:
   if link.startswith("https"):
      print (link)

輸出

https://tutorialspoint.tw
https://www.example.com
廣告