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

如何用Kotlin的Jsoup库实现devicespecifications.com搜索提交

解决方案

你之前的思路存在关键问题:Jsoup仅用于解析和修改本地内存中的HTML文档,无法模拟浏览器的表单提交或回车键触发的搜索行为,所以修改搜索框的值不会对网站产生任何实际请求。正确的做法是直接模拟网站的搜索请求逻辑,步骤如下:

1. 分析网站搜索机制

手动测试网站搜索会发现,输入手机型号并回车后,网站会发送一个GET请求到搜索接口,格式为:
https://www.devicespecifications.com/en/search/?q=【URL编码后的手机型号】

比如搜索"iPhone 15",实际请求URL是:https://www.devicespecifications.com/en/search/?q=iPhone+15

2. 用Jsoup发送搜索请求

直接构造上述格式的URL,发送GET请求获取搜索结果页面,再提取规格页面链接:

import org.jsoup.Jsoup
import java.net.URLEncoder

fun searchDeviceSpecs(phoneName: String) {
    // 对手机型号进行URL编码,处理空格、特殊字符等
    val encodedPhoneName = URLEncoder.encode(phoneName, "UTF-8")
    val searchUrl = "https://www.devicespecifications.com/en/search/?q=$encodedPhoneName"
    
    // 发送搜索请求,获取结果页面
    val searchResultDoc = Jsoup.connect(searchUrl).get()
    
    // 从搜索结果中提取第一个设备的规格页面链接
    val specPageLink = searchResultDoc.selectFirst(".model-listing .model-title a")?.attr("href")
    
    specPageLink?.let {
        // 拼接完整的规格页面URL
        val fullSpecUrl = "https://www.devicespecifications.com$it"
        // 获取规格页面文档
        val specDoc = Jsoup.connect(fullSpecUrl).get()
        
        // 示例:解析设备名称
        val deviceName = specDoc.selectFirst(".device-name h1")?.text()
        println("设备名称:$deviceName")
        // 可继续解析其他规格参数
    } ?: run {
        println("未找到对应设备的规格信息")
    }
}

3. 补充说明

  • 无需操作原页面的搜索框元素,直接构造搜索请求更高效
  • 必须对手机型号做URL编码,避免空格、特殊字符导致请求失败
  • 若搜索结果唯一,网站会直接重定向到规格页面,Jsoup会自动跟随重定向,可直接获取规格页面内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:53:27