Kotlin Web Scraping

Вебскрапінг на Kotlin: повний посібник

У цьому посібнику я покажу, як збирати дані за допомогою Kotlin та Skrape{it} бібліотека. Ми розглянемо все: від налаштування вашого середовища до отримання даних із вебсайтів. Наприкінці ви зможете скрапити кілька сторінок і зберігати дані у зручному для використання форматі. Почнімо!

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

Kotlin — це сучасна мова програмування, що працює на Java Virtual Machine (JVM). Ось кілька причин, чому Kotlin — чудовий вибір для вебскрапінгу:

  • Concise Syntax: Kotlin має більш читабельний і лаконічний синтаксис порівняно з Java, що спрощує написання та підтримку скриптів для вебскрапінгу.
  • Сумісність із Java: Kotlin може використовувати бібліотеки Java, що дає змогу застосовувати наявні інструменти та фреймворки для вебскрапінгу.
  • Type Safety: Kotlin зменшує кількість помилок під час виконання завдяки суворій типобезпеці, що робить скрипти для вебскрапінгу надійнішими.
  • Asynchronous Support: Kotlin підтримує корутини, які допомагають ефективно керувати кількома завданнями вебскрапінгу.

Найкраща альтернатива вебскрапінгу на Kotlin

Хоча Kotlin — потужна мова для вебскрапінгу, створення та підтримка власного вебскрапера можуть бути складними й затратними за часом. Сайти часто оновлюють свою структуру, впроваджують антискрапінгові заходи та вимагають обробки CAPTCHA або рендерингу JavaScript — це виклики, що потребують постійного супроводу.

Кращою альтернативою є використання спеціалізованих рішень інструменти для вебскрапінгу and APIs. Ці рішення забезпечують:

  • Faster Deployment: Не потрібно писати й налагоджувати власні вебскрапери.
  • Scalability: Легко збирайте великі обсяги даних без турбот про інфраструктуру.
  • Built-in Anti-Bot Solutions: Долати обмеження та надійно отримувати доступ до даних.
  • Structured Data Output: Отримуйте чисті, готові до використання дані у форматах JSON, CSV або API.

Якщо вам потрібен простий, масштабований і ефективний спосіб отримувати дані з вебсайтів, розгляньте використання платформи для вебскрапінгу замість того, щоб писати власне рішення на Kotlin. Продовжити

Prerequisites

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

  1. JDK (Java Development Kit): Встановіть найновішу LTS-версію JDK.
  2. Gradle або Maven: Інструмент збирання для керування залежностями.
  3. Kotlin IDE: IntelliJ IDEA або Visual Studio Code із розширенням Kotlin.
  4. Skrape{it} Library: Потужна бібліотека Kotlin для вебскрапінгу.

Installing Dependencies

To add Skrape{it} to your Kotlin project, open your build.gradle.kts file and add the following dependency:

implementation("it.skrape:skrapeit:1.2.2")
Then, run the following command to install the dependencies:
./gradlew build

Налаштування Kotlin-проєкту для вебскрапінгу

Щоб створити новий проєкт Kotlin, виконайте такі кроки:

Відкрийте термінал і створіть новий каталог:

mkdir KotlinWebScraper
cd KotlinWebScraper
  1. Ініціалізуйте новий Kotlin-проєкт за допомогою Gradle:
    gradle init — type kotlin-application
  2. Відкрийте проєкт у вашій Kotlin IDE.

Базовий вебскрапінг на Kotlin

Let’s write a simple script to scrape an e-commerce site and extract product information.

Крок 1: Отримайте вебсторінку

Import the required packages in App.kt:

import it.skrape.core.*
import it.skrape.fetcher.*
Then, use Skrape{it} to fetch the HTML content of a webpage:
val html: String = skrape(HttpFetcher) {
request {
url = "https://www.scrapingcourse.com/ecommerce/"
}
response {
htmlDocument {
html
}
}
}
println(html)

Крок 2: Вилучення даних

Визначте data class для зберігання даних про товар:

data class Product(
var url: String = "",
var image: String = "",
var name: String = "",
var price: String = ""
)
Extract product details using Skrape{it}:
val products: List = skrape(HttpFetcher) {
request {
url = "https://www.scrapingcourse.com/ecommerce/"
}
extractIt<ArrayList> {
htmlDocument {
"li.product" {
findAll {
forEach { productHtmlElement ->
val product = Product(
url = productHtmlElement.a { findFirst { attribute("href") } },
image = productHtmlElement.img { findFirst { attribute("src") } },
name = productHtmlElement.h2 { findFirst { text } },
price = productHtmlElement.span { findFirst { text } }
)
it.add(product)
}
}
}
}
}
}
println(products)

Крок 3: Збережіть дані у CSV

Збережіть витягнуті дані у CSV-файл:

import org.apache.commons.csv.CSVFormat
import java.io.FileWriter
val csvFile = FileWriter("products.csv")
CSVFormat.DEFAULT.print(csvFile).apply {
printRecord("url", "image", "name", "price")
products.forEach { (url, image, name, price) ->
printRecord(url, image, name, price)
}
}.close()
csvFile.close()

Просунуті техніки вебскрапінгу

Вебкраулінг: Збирайте дані з кількох сторінок

Змініть свій скрипт, щоб він збирав дані з кількох сторінок:

val pagesToScrape = mutableListOf("https://www.scrapingcourse.com/ecommerce/page/1/")
val pagesDiscovered = mutableSetOf()
while (pagesToScrape.isNotEmpty()) {
val pageURL = pagesToScrape.removeAt(0)
skrape(HttpFetcher) {
request { url = pageURL }
response {
htmlDocument {
"a.page-numbers" {
findAll {
forEach { paginationElement ->
val newPage = paginationElement.attribute("href")
if (!pagesDiscovered.contains(newPage)) {
pagesToScrape.add(newPage)
pagesDiscovered.add(newPage)
}
}
}
}
}
}
}
}

Використання безголового браузера

Деякі сайти потребують рендерингу JavaScript. Використовуйте BrowserFetcher для вебскрапінгу динамічних сайтів:

val products: List = skrape(BrowserFetcher) {
request {
url = "https://scrapingclub.com/exercise/list_infinite_scroll/"
}
extractIt<ArrayList> {
htmlDocument {
".post" {
findAll {
forEach { productHtmlElement ->
val product = Product(
url = productHtmlElement.a { findFirst { attribute("href") } },
image = productHtmlElement.img { findFirst { attribute("src") } },
name = productHtmlElement.h4 { findFirst { text } },
price = productHtmlElement.h5 { findFirst { text } }
)
it.add(product)
}
}
}
}
}
}

Дізнайтеся, які headless-браузери найкраще використовувати.

Conclusion

Kotlin is a powerful and modern language for web scraping. With Skrape{it}, you can efficiently fetch, parse, and store web data. Whether you are scraping static or dynamic pages, Kotlin offers flexibility and efficiency in your web scraping projects.

Схожі записи