Kotlin 网络抓取

Kotlin Web Scraping:完整指南

在本指南中,我将指导您如何使用 Kotlin 和 Skrape{it} 资料库。我们将介绍从设置环境到从网站获取数据的所有内容。课程结束时,您将能够抓取多个页面,并以易于使用的格式保存数据。让我们开始吧!

为什么使用 Kotlin 进行网络抓取?

Kotlin 是一种运行在 Java 虚拟机(JVM)上的现代编程语言。以下是 Kotlin 成为网页抓取理想选择的一些原因:

  • 简明语法:与 Java 相比,Kotlin 的语法更易读、更简洁,因此更容易编写和维护网络搜索脚本。
  • 与 Java 的互操作性:Kotlin 可以使用 Java 库,让您可以利用现有的网络刮擦工具和框架。
  • 安全类型:Kotlin 通过执行类型安全减少了运行时错误,从而提高了网络搜索脚本的可靠性。
  • 异步支持: Kotlin 支持协程,有助于高效管理多个网页抓取任务。

用 Kotlin 替代网络抓取的最佳方法

虽然 Kotlin 是一种功能强大的网络抓取语言,但构建和维护自己的抓取程序可能既复杂又耗时。网站会经常更新结构、实施反抓取措施、需要处理验证码或 JavaScript 渲染--这些都是需要不断维护的挑战。

更好的替代方法是使用专用的 网络抓取工具 和 应用程序接口.这些解决方案提供

  • 更快的部署: 无需编写和调试自定义刮擦程序。
  • 可扩展性: 轻松搜索大量数据,无需考虑基础设施问题。
  • 内置反僵尸解决方案 克服限制,可靠地访问数据。
  • 结构化数据输出: 以 JSON、CSV 或 API 格式获取简洁、随时可用的数据。

如果你需要一种省心、可扩展且高效的网页数据提取方式,不妨考虑使用网页抓取平台,而不是用 Kotlin 自己编写解决方案。继续

先决条件

在开始使用 Kotlin 进行网络刮擦之前,请确保您已安装以下程序:

  1. JDK(Java 开发工具包):安装最新的 JDK LTS 版本。
  2. Gradle 或 Maven:管理依赖关系的构建工具。
  3. Kotlin IDE: IntelliJ IDEA 或安装了 Kotlin 扩展的 Visual Studio Code。
  4. Skrape{it}图书馆: 一个功能强大的 Kotlin 网页抓取库。

安装依赖项

要在 Kotlin 项目中添加 Skrape{it},请打开 build.gradle.kts 文件并添加以下依赖关系:

执行("it.skrape:skrapeit:1.2.2")
然后,运行以下程序 指挥部 要安装依赖项:./gradlew build

设置 Kotlin 网络抓取项目

要创建新的 Kotlin 项目,请按照以下步骤操作:

打开终端,创建一个新目录:

mkdir KotlinWebScraper
CD KotlinWebScraper
  1. 使用 Gradle 初始化一个新的 Kotlin 项目:
    gradle init — type kotlin-application
  2. 在 Kotlin IDE 中打开项目。

Kotlin 中的基本网络抓取

让我们编写一个简单的脚本,来抓取电子商务网站并提取产品信息。

步骤 1:获取网页

在 App.kt 中导入所需的软件包:

import it.skrape.core.*
import it.skrape.fetcher.*
然后,使用 Skrape{it} 抓取网页的 HTML 内容:
缬氨酸 html:字符串 = skrape(HttpFetcher) {
请求 {
url = "https://www.scrapingcourse.com/ecommerce/"
}
响应 {
htmlDocument {
html
}
}
}
println(html)

步骤 2:提取数据

定义用于存储产品详细信息的数据类:

data class Product(
var url:字符串 = "",
var 图像:字符串 = "",
var name: 字符串 = "",
var 价格:字符串 = ""
)
使用 Skrape{it} 提取产品详细信息:
缬氨酸 产品:List = skrape(HttpFetcher) {
请求 {
url = "https://www.scrapingcourse.com/ecommerce/"
}
extractIt {
htmlDocument {
"li.product" {
findAll {
forEach { productHtmlElement ->
缬氨酸 产品 = 产品(
url = productHtmlElement.a { findFirst { attribute("href")}},
image = productHtmlElement.img { findFirst { attribute("src")}},
name = productHtmlElement.h2 { findFirst { text }},
价格 = productHtmlElement.span { findFirst { text }.}
)
it.add(product)
}
}
}
}
}
}
println(products)

步骤 3:以 CSV 格式存储数据

将提取的数据保存为 CSV 文件:

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

高级网络抓取技术

网络抓取抓取多个页面

修改你的脚本,以抓取多个页面:

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

使用无头浏览器

有些网站需要 JavaScript 渲染。使用 BrowserFetcher 抓取动态网站:

缬氨酸 产品:List = skrape(BrowserFetcher) {
请求 {
url = "https://scrapingclub.com/exercise/list_infinite_scroll/"
}
extractIt {
htmlDocument {
".职位" {
findAll {
forEach { productHtmlElement ->
缬氨酸 产品 = 产品(
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)
}
}
}
}
}
}

了解最适合使用的无头浏览器。

结论

Kotlin 是一种功能强大的现代网络搜刮语言。使用 Skrape{it},您可以高效地获取、解析和存储网络数据。无论您是刮擦静态页面还是动态页面,Kotlin 都能为您的网络刮擦项目提供灵活性和效率。

类似文章