Swift中的HTML解析:用于iOS/macOS的SwiftSoup库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

使用SwiftSoup在Swift中解析HTML(iOS/macOS)



在开发iOS和macOS应用程序时,经常需要从HTML页面中提取数据。无论是解析新闻网站、获取汇率还是分析网页内容,都离不开一个可靠的工具。在Swift世界中,事实上的标准是SwiftSoup库——它是流行Java解析器Jsoup的纯Swift移植版本。



SwiftSoup提供了便捷的API,用于加载、解析和操作HTML文档,支持CSS选择器和DOM遍历方法。该库完全用Swift编写,没有外部依赖,并支持所有Apple平台:iOS(从11.0开始)、macOS(10.13+)、watchOS和tvOS。



通过Swift Package Manager安装SwiftSoup



在项目的Package.swift中添加依赖,或通过Xcode菜单:File → Add Packages...



// Package.swiftdependencies: [    .package(url: "https://github.com/scinfu/SwiftSoup.git", from: "2.6.0")],targets: [    .target(        name: "YourTarget",        dependencies: ["SwiftSoup"])]

// 或者在Xcode中:https://github.com/scinfu/SwiftSoup.git,版本2.6.0


安装后,在需要的文件中导入库:



import SwiftSoup


基础HTML字符串解析



最简单的入门方法是解析从URLSession等来源获取的HTML字符串:



let html = """<html>    <body>        <h1>你好,世界!</h1>        <p class="content">这是段落内的文本</p>        <a href="https://example.com">链接</a>    </body></html>"""

do { let doc: Document = try SwiftSoup.parse(html) let title = try doc.title() let paragraph = try doc.select("p.content").first()?.text() let link = try doc.select("a").first()?.attr("href") print("标题:\\(title)") print("段落:\\(paragraph ?? "未找到")") print("链接:\\(link ?? "未找到")")} catch { print("解析错误:\\(error)")}


从网络加载并解析HTML



大多数情况下,HTML是通过HTTP获取的。以下是一个加载页面并提取数据的示例:



import Foundationimport SwiftSoup

func fetchAndParse(urlString: String) async { guard let url = URL(string: urlString) else { return } do { let (data, _) = try await URLSession.shared.data(from: url) guard let html = String(data: data, encoding: .utf8) else { return } let doc = try SwiftSoup.parse(html) // 提取所有链接 let links = try doc.select("a[href]") for link in links { let href = try link.attr("href") let text = try link.text() print("\\(text) -> \\(href)") } // 提取h2标题 let headings = try doc.select("h2") for heading in headings { print("标题:\\(try heading.text())") } } catch { print("错误:\\(error)") }}

// 使用Task { await fetchAndParse(urlString: "https://example.com")}


使用CSS选择器



SwiftSoup支持几乎所有标准CSS选择器,使元素查找变得直观:



  • tag — 按标签名:try doc.select("div")
  • #id — 按ID:try doc.select("#main-content")
  • .class — 按类名:try doc.select(".article-title")
  • [attribute] — 按属性:try doc.select("[data-id]")
  • parent > child — 直接子元素:try doc.select("ul > li")
  • el:contains(t

推荐