使用Jsoup爬取Itau网站表格数据仅获部分内容,请求排查问题
分析Jsoup爬取Itau网站表格数据失败的原因及解决方案
我来帮你拆解下为什么用doc.getElementsByClass("tabela2")只能拿到部分数据,没法提取具体数值:
1. 数据是动态加载的(最可能的原因)
现代金融网站很少会把所有核心数据塞进初始HTML里,Itau这个页面大概率是通过AJAX异步请求拉取表格数值的。Jsoup只能抓取页面首次加载的静态HTML,那些实际的收益数据是页面加载完成后,浏览器执行JS才从后端接口获取并渲染到表格里的——所以你用Jsoup拿到的doc里只有表格的空框架,没有具体数值。
验证方法:打开浏览器开发者工具(F12),切换到「网络」标签页,刷新页面后看看有没有XHR/Fetch请求返回了JSON格式的表格数据,你要的数值肯定藏在某个接口响应里。
解决思路:
- 直接定位到那个动态数据接口,用Jsoup或OkHttp请求该接口,解析返回的JSON数据,这比爬页面要高效得多;
- 如果必须模拟完整浏览器渲染流程,可以用Selenium、Playwright这类工具,它们能执行页面JS,等数据完全加载后再抓取。
2. 反爬机制的限制
Itau这类金融网站通常会有反爬检测:
- 你的
userAgent可能不够完整,或者缺少必要的请求头(比如Accept、Referer、Cookie),导致服务器返回的页面不包含完整数据; - 服务器可能识别出请求并非来自真实浏览器,故意返回不完整的内容。
解决思路:
- 复制浏览器请求该页面时的全部请求头(在开发者工具「网络」栏查看请求的Headers),把它们都加到Jsoup的
connect()中:doc = Jsoup.connect(url) .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8") .header("Referer", "https://www.itau.com.br/") // 复制浏览器中的Cookie内容(注意Cookie可能会过期) .header("Cookie", "你的浏览器Cookie内容") .get(); - 可以尝试添加请求延迟,模拟人类访问的节奏,避免因请求过于频繁被拦截。
3. 表格结构的定位偏差
可能你选中的"tabela2"只是表格的外层容器,实际的数值单元格在更深的子元素里,或者类名存在动态变化(比如带随机后缀的类名)。
验证方法:在浏览器中用「检查元素」查看表格的DOM结构,确认具体数值所在的标签和类名——比如是不是在<td class="valor">这类子元素里。
解决思路:
- 调整选择器精度,比如用
doc.select(".tabela2 td.valor")直接定位数值单元格,而不是只抓取外层表格容器; - 如果表格是嵌套结构,可以用更精准的CSS选择器或XPath来定位元素。
内容的提问来源于stack exchange,提问作者binaryZomby
相关产品推荐
相关产品推荐

