Включает набор готовых скриптов для автоматизации задач на популярных платформах, таких как LinkedIn, Instagram и Twitter.
В этом руководстве я покажу, как извлекать веб-контент на Swift, используя библиотека SwiftSoup. SwiftSoup — это как jQuery для Swift: он упрощает парсинг HTML и извлечение нужных данных. Если вы новичок в Swift или просто хотите попробовать скрейпинг на новом языке, это руководство поможет быстро и эффективно начать. Приступим!
Почему стоит выбрать Swift для веб-скрейпинга?
Swift Swift в первую очередь известен благодаря разработке под iOS и macOS, но это также язык, способный справляться с такими задачами, как Веб-скрейпинг и автоматизация:. Хотя для этой задачи Swift используется не так часто, как Python, у него есть несколько преимуществ, которые делают его привлекательным:
- Performance: Swift быстр и эффективен, что особенно полезно при работе с большими объёмами данных.
- Native Support: Swift нативно работает на macOS, что делает его отличным вариантом для разработчиков, работающих в экосистеме Apple.
- Type Safety: Swift — типобезопасный язык, поэтому ошибки можно обнаружить на этапе компиляции, а не во время выполнения. Это делает ваш скрипт для скрейпинга более надежным и менее подверженным ошибкам.
⚡ Альтернативный вариант: использовать no-code-скрейпер
Если вы хотите собирать данные в больших объёмах или не хотите возиться с настройкой браузера, ротацией прокси и антибот-защитой, можно рассмотреть готовое hosted-решение вроде Web Scraper API. Это полностью управляемый инструмент, который из коробки обрабатывает рендеринг JavaScript, решение CAPTCHA и ротацию IP-адресов.
Хотя это руководство посвящено созданию скрейпера на Swift, такие инструменты, как Bright Data или ScrapingBee, могут быть практичной альтернативой для разработчиков, которые предпочитают сосредоточиться на анализе данных, а не на инфраструктуре. Это особенно полезно при работе со сложными или защищёнными сайтами.
Пререквизиты
Перед началом убедитесь, что у вас есть следующее:
- Swift Installed: Если вы работаете на macOS, можно установить Xcode, в который входит Swift. В Windows или Linux можно скачать Swift с официального сайта и следовать инструкциям по установке.
- 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:
импорт PackageDescription
пусть 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/” в качестве примера. На этом сайте есть список товаров, которые мы можем извлечь.
Шаг 1: Загрузка HTML-кода
Чтобы извлечь веб-страницу, первым шагом нужно получить HTML-контент. Swift предоставляет встроенный способ выполнять HTTP-запросы с помощью URLSession, но для простоты мы воспользуемся инициализатором String, чтобы напрямую получить HTML:
импорт Foundation
импорт FoundationNetworking
импорт SwiftSoup
пусть url = URL(string: "https://scrapeme.live/shop/")!
пусть html = try! String(contentsOf: url)
В этом фрагменте кода мы создаём объект URL, указывающий на целевую страницу, и используем String(contentsOf:) для получения HTML-содержимого.
Шаг 2: Разбор HTML-кода
Как только у вас есть HTML-контент, следующий шаг — разобрать его. SwiftSoup упрощает это с помощью функции parse. Эта функция преобразует HTML-строку в объект Document, с которым можно работать:
пусть документ = try! SwiftSoup.parse(html)
К этому моменту вся веб-страница уже загружена и разобрана в структуру, из которой можно выполнять запросы и извлекать данные.
Шаг 3: извлеките данные
Теперь, когда HTML разобран, можно начинать извлекать нужные данные. Например, можно получить со страницы названия всех товаров, цены и URL-адреса. Мы будем использовать CSS-селекторы, чтобы выбрать нужные элементы. Вот как извлечь данные для одного товара:
пусть продукт = попробуйте document.select("li.product").first()!
пусть url = попробуйте product.select("a").first()!.attr("href")
пусть image = попробуйте product.select("img").first()!.attr("src")
пусть name = попробуйте product.select("h2").first()!.text()
пусть price = попробуйте product.select("span").first()!.text()
печать("URL: (url)")
печать("Изображение: (изображение)")
печать("Имя: (имя)")
печать("Цена: (price)")
В этом примере:
- 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] = []
пусть productElements = попробуйте document.select("li.product")
для элемент в productElements.array() {
пусть url = попробуйте element.select("a").first()!.attr("href")
пусть image = попробуйте element.select("img").first()!.attr("src")
пусть name = попробуйте element.select("h2").first()!.text()
пусть price = попробуйте element.select("span").first()!.text()
пусть продукт = Product(url: url, image: image, name: name, price: price)
products.append(product)
}
для продукт в products {
печать("(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", с сайта: "2.4.3"),
Then, import it into your main.swift:
импорт CSV
Now, вы можете записать собранные данные в CSV file:
пусть stream = OutputStream(toFileAtPath: "products.csv", append: false)!
пусть csv = try! CSVWriter(stream: stream)
try! csv.write(row: ["URL", "Image", "Name", "Price"])
для продукт в 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.
Работа с пагинацией и обходом нескольких страниц
Многие сайты, особенно интернет-магазины, используют пагинацию, то есть данные о товарах распределены по нескольким страницам. В этом случае вам нужно пройти по нескольким страницам, чтобы собрать все данные.
Вот как можно работать с пагинацией:
- Получите URL первой страницы.
- Разберите HTML-контент страницы.
- Извлеките ссылки на следующие страницы.
- Повторяйте процесс для следующей страницы, пока не будут собраны данные со всех страниц.
Например, если ссылки пагинации находятся в тегах a с классом page-numbers, вы можете извлечь ссылки на следующую страницу так:
пусть paginationLinks = попробуйте document.select("a.page-numbers")
для link в paginationLinks.array() {
пусть nextPageUrl = попробуйте link.attr("href")
печать("Следующая страница: (nextPageUrl)")
}
Заключение
Swift предлагает быструю и эффективную платформу для веб-скрейпинга, а с библиотеками вроде SwiftSoup вы можете легко разбирать HTML-разметку и извлекать из нее данные. Хотя веб-скрейпинг может быть сложным, особенно при работе с пагинацией и антибот-мерами, Swift предоставляет все инструменты, необходимые для создания мощных и эффективных веб-скрейперов.

