如何用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
相关产品推荐
相关产品推荐

