You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Kotlin结合Jsoup爬取克罗地亚动物收容所网站数据?求学习资源

解决Android下用Jsoup爬取动物收容所数据及地理编码问题

一、用Jsoup爬取目标网站数据

1. 添加Jsoup依赖

在Module级别的build.gradle中添加依赖:

implementation 'org.jsoup:jsoup:1.17.2'

2. 定义数据类

先创建存储收容所信息的数据类:

data class AnimalShelter(
    val name: String,
    val address: String,
    val city: String
)

3. 爬取单页数据

注意:Android禁止在主线程执行网络请求,所有爬取操作要放在子线程或协程中:

// 爬取指定页码的收容所数据
fun fetchShelters(page: Int): List<AnimalShelter> {
    val targetUrl = "https://jic.mps.hr/sklonista/#!sklonista?page=$page"
    val doc = Jsoup.connect(targetUrl).get()
    val shelterList = mutableListOf<AnimalShelter>()
    
    // 定位表格行(跳过表头,只取数据行)
    val rows = doc.select("table tbody tr")
    rows.forEach { row ->
        val columns = row.select("td")
        // 确保列数足够,避免数组越界
        if (columns.size >= 4) {
            val name = columns[1].text().trim()    // 第二列:收容所名称
            val address = columns[2].text().trim() // 第三列:地址
            val city = columns[3].text().trim()    // 第四列:城市
            shelterList.add(AnimalShelter(name, address, city))
        }
    }
    return shelterList
}

4. 处理分页(3页数据)

循环调用单页爬取方法,整合所有数据:

fun fetchAllShelters(): List<AnimalShelter> {
    val allShelters = mutableListOf<AnimalShelter>()
    // 遍历1-3页
    for (page in 1..3) {
        val pageData = fetchShelters(page)
        allShelters.addAll(pageData)
    }
    return allShelters
}

注意:如果网站是动态加载数据(点击分页才渲染),Jsoup无法获取动态生成的HTML,此时需要用Chrome开发者工具的Network面板,找到加载数据的API接口,直接请求JSON接口会更高效。

二、地理编码实现(谷歌地图标记)

要将地址转换为经纬度,可使用谷歌地图的Geocoding功能:

  1. 先在Google Cloud Console申请API密钥,并启用Geocoding API
  2. 添加谷歌服务依赖到build.gradle:
implementation 'com.google.android.gms:play-services-maps:18.2.0'
implementation 'com.google.android.gms:play-services-location:21.0.1'
  1. 地理编码示例代码(用协程异步执行):
// 根据地址获取经纬度
fun getCoordinates(context: Context, address: String, callback: (Pair<Double, Double>?) -> Unit) {
    val geocoder = Geocoder(context, Locale.getDefault())
    CoroutineScope(Dispatchers.IO).launch {
        try {
            // 只取第一个匹配的结果
            val addressResult = geocoder.getFromLocationName("$address, ${Locale.getDefault().country}", 1)
            if (!addressResult.isNullOrEmpty()) {
                val lat = addressResult[0].latitude
                val lng = addressResult[0].longitude
                withContext(Dispatchers.Main) {
                    callback(Pair(lat, lng))
                }
            } else {
                withContext(Dispatchers.Main) {
                    callback(null)
                }
            }
        } catch (e: IOException) {
            e.printStackTrace()
            withContext(Dispatchers.Main) {
                callback(null)
            }
        }
    }
}

调用时传入收容所的完整地址(地址+城市),拿到经纬度后即可在谷歌地图上添加标记。

三、Kotlin Android开发学习工具推荐

  • Android Studio:官方IDE,自带Kotlin语法支持、代码提示、调试工具和模拟器,是开发Android应用的必备工具
  • Kotlin Playground:在线运行Kotlin代码的平台,无需搭建本地环境,适合练习基础语法
  • JetBrains Academy:交互式学习平台,包含Kotlin基础和Android开发实战项目,边学边练
  • Google Codelabs:官方推出的Android开发教程,从入门到进阶,全部是实战导向的项目
  • Stack Overflow:遇到开发问题时搜索解决方案,也可以提问求助社区

内容的提问来源于stack exchange,提问作者Sara P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:57:02