Підручник із вебскрапінгу за допомогою Swift

Вебскрапінг за допомогою Swift: посібник 2026

У цьому підручнику я покажу, як здійснювати вебскрапінг вебконтенту за допомогою Swift, за допомогою бібліотека SwiftSoup. SwiftSoup — це як jQuery для Swift, що спрощує парсинг HTML і вилучення потрібних даних. Якщо ви новачок у Swift або просто хочете спробувати вебскрапінг новою мовою, цей посібник допоможе вам швидко й ефективно розпочати. Поїхали!

Чому варто обрати Swift для вебскрапінгу?

Swift передусім відома завдяки розробці для iOS і macOS, але це також мова, здатна виконувати такі завдання, як вебскрапінг. Хоча для цієї мети Swift використовують не так часто, як Python, він має кілька переваг, які роблять його привабливим:

  • Performance: Swift швидкий і ефективний, що особливо корисно під час оброблення великих обсягів даних.
  • Native Support: Swift нативно працює на macOS, що робить його чудовим варіантом для розробників, які працюють в екосистемі Apple.
  • Type Safety: Swift — це типобезпечна мова, тобто помилки можна виявити під час компіляції, а не під час виконання. Це робить ваш скрипт для вебскрапінгу надійнішим і менш схильним до помилок.

⚡ Альтернативний варіант: скористайтеся скрапером без коду

Якщо ви хочете збирати дані у великих масштабах або уникнути налаштування браузера, ротації проксі чи викликів, пов’язаних із антибот-захистом, варто розглянути хмарне рішення на кшталт Web Scraper API. Це повністю керований інструмент, який із коробки обробляє рендеринг JavaScript, розв’язання CAPTCHA та ротацію IP.

Хоча цей посібник зосереджений на створенні скрапера на Swift, такі інструменти, як Bright Data або ScrapingBee, можуть стати практичною альтернативою для розробників, які воліють зосередитися на аналізі даних, а не на інфраструктурі. Це особливо корисно під час роботи зі складними або захищеними вебсайтами.

Prerequisites

Перш ніж почати, переконайтеся, що у вас є таке:

  1. Swift Installed: Якщо ви працюєте на macOS, ви можете встановити Xcode, до складу якого входить Swift. На Windows або Linux можна завантажити Swift з офіційного сайту та виконати інструкції зі встановлення.
  2. Swift Package Manager (SPM): Цей інструмент допоможе вам керувати бібліотеками на кшталт SwiftSoup, які знадобляться для парсингу HTML.

Після встановлення Swift відкрийте термінал і перевірте його, ввівши:

swift - version

Якщо ви бачите щось на кшталт “Swift version 5.9.2”, ви готові до роботи!

Налаштування вашого проєкту Swift

Крок 1: Створіть новий проєкт Swift

Спочатку створіть новий каталог для свого проєкту й перейдіть у нього. Потім ініціалізуйте новий командний інструмент Swift:

mkdir SwiftScraper
cd SwiftScraper
swift package init - name SwiftScraper - type executable

This will create a new directory with the necessary files for your Swift project. You’ll see a Package.swift file and a Sources folder containing main.swift.

Крок 2: Відкрийте свій проєкт

Ви можете відкрити свій проєкт у Xcode or any other Swift-compatible IDE. The main.swift file inside the Sources folder contains a simple “Hello, World!” program, which you’ll replace with your web scraping code.

Крок 3: Встановіть SwiftSoup

Next, you’ll need to install SwiftSoup, a library that will help you parse and extract data from HTML. Open the Package.swift file and add SwiftSoup as a dependency:

import PackageDescription
let package = Package(
name: "SwiftScraper",
dependencies: [
.package(url: "https://github.com/scinfu/SwiftSoup.git", з: "2.6.0")
],
targets: [
.executableTarget(
name: "SwiftScraper",
dependencies: [
.product(name: "SwiftSoup", package: "SwiftSoup")
]
),
]
)

After updating Package.swift, run the following command to install the package:

swift package update

Це завантажить і інтегрує SwiftSoup у ваш проєкт.

Вебскрапінг за допомогою Swift

Тепер, коли ви налаштували проєкт і встановили SwiftSoup, час почати вебскрапінг даних із вебсайту. Ми використаємо вебсайт “https://scrapeme.live/shop/” as an example. This site has a list of products that we can extract.

Крок 1: Отримайте HTML-вміст

Щоб виконати вебскрапінг вебсторінки, перший крок — отримати HTML-вміст. Swift надає вбудований спосіб надсилати HTTP-запити за допомогою URLSession, але для простоти ми скористаємося ініціалізатором String, щоб напряму отримати HTML:

import Foundation
import FoundationNetworking
import SwiftSoup
let url = URL(string: "https://scrapeme.live/shop/")!
let html = try! String(contentsOf: url)

У цьому фрагменті коду ми створюємо об’єкт URL, що вказує на цільову сторінку, і використовуємо String(contentsOf:) для отримання HTML-вмісту.

Крок 2: Розбір HTML-вмісту

Після того як у вас є HTML-вміст, наступний крок — розібрати його. SwiftSoup спрощує це за допомогою функції parse. Ця функція перетворює рядок HTML на об’єкт Document, яким ви можете керувати:

let document = try! SwiftSoup.parse(html)

На цьому етапі вся вебсторінка вже завантажена й розібрана в структуру, з якої можна виконувати запити та витягати дані.

Крок 3: Витягнення даних

Тепер, коли HTML розібрано, можна починати витягати потрібні дані. Наприклад, ви можете витягнути з сторінки всі назви продуктів, ціни та URL. Для вибору потрібних елементів ми використаємо CSS-селектори. Ось як можна витягти дані для одного продукту:

let product = try document.select("li.product").first()!
let url = try product.select("a").first()!.attr("href")
let image = try product.select("img").first()!.attr("src")
let name = try product.select("h2").first()!.text()
let price = try product.select("span").first()!.text()
print("URL: (url)")
print("Зображення: (image)")
print("Ім’я: (name)")
print("Ціна: (ціна)")

У цьому прикладі:

  • select(“li.product”) selects all product list items.
  • select(“a”), select(“img”), select(“h2”) і select(“span”) використовуються для вибору конкретних деталей товару, як-от URL, зображення, назва та ціна.
  • attr(“href”) і attr(“src”) витягують значення атрибутів, тоді як text() отримує текстовий вміст.

Крок 4: Витягнення кількох продуктів

Сторінка містить кілька товарів, тож вам потрібно пройтися циклом по всіх елементах товарів, щоб витягти дані для кожного з них. Ось як це можна зробити:

var products: [Product] = []
let productElements = try document.select("li.product")
for element in productElements.array() {
let url = try element.select("a").first()!.attr("href")
let image = try element.select("img").first()!.attr("src")
let name = try element.select("h2").first()!.text()
let price = try element.select("span").first()!.text()
let product = Product(url: url, image: image, name: name, price: price)
products.append(product)
}
for product in products {
print("(product.name) - (product.price) - (product.url)")
}

У цьому коді ми використовуємо array(), щоб перетворити елементи на масив, а потім ітеруємося по ньому, щоб витягти необхідні дані для кожного продукту.

Крок 5: Збереження даних у CSV-файл

Нарешті, ви можете захотіти зберегти зібрані дані у CSV-файл для зручного аналізу. Для цього можна використати CSV.swift library. Add it to your Package.swift dependencies:

.package(url: "https://github.com/yaslab/CSV.swift.git", from: "2.4.3"),

Then, import it into your main.swift:

import CSV
Now, ви можете записати зібрані дані до CSV file:
let stream = OutputStream(toFileAtPath: "products.csv", додати: false)!
let csv = try! CSVWriter(stream: stream)
try! csv.write(row: ["URL", "Image", "Name", "Price"])
for product in products {
try! csv.write(row: [product.url, product.image, product.name, product.price])
}
csv.stream.close()

This code creates a CSV file named products.csv and writes the product data into it. Each row will contain the URL, image URL, name, and price of a product.

Обробка пагінації та сканування кількох сторінок

Багато вебсайтів, особливо сайти електронної комерції, мають пагінацію, тобто дані про товари розподілені між кількома сторінками. У такому разі вам потрібно буде обійти кілька сторінок, щоб зібрати всі дані.

Ось як можна обробити пагінацію:

  1. Отримайте URL першої сторінки.
  2. Розберіть HTML-вміст сторінки.
  3. Витягніть посилання на наступну сторінку або сторінки.
  4. Повторюйте процес для наступної сторінки, доки не буде виконано вебскрапінг усіх сторінок.

Наприклад, якщо посилання пагінації розміщені в тегах anchor з класом page-numbers, ви можете витягти посилання на наступну сторінку так:

let paginationLinks = try document.select("a.page-numbers")
for link in paginationLinks.array() {
let nextPageUrl = try link.attr("href")
print("Наступна сторінка: (nextPageUrl)")
}

Conclusion

Swift пропонує швидку та ефективну платформу для вебскрапінгу, а з бібліотеками на кшталт SwiftSoup ви можете легко розбирати та витягати дані з HTML-вмісту. Хоча вебскрапінг може бути складним, особливо коли йдеться про пагінацію та антибот-захист, Swift надає всі інструменти, потрібні для створення потужних і ефективних вебскраперів.

Схожі записи