使用Jsoup.connect(URL).get()爬取目标页返回主页的解决办法
解决Jsoup爬取目标页面返回主页源码的问题
这种跳转问题大概率是网站的反爬机制或者会话验证导致的,给你几个实用的排查和解决方向:
模拟浏览器请求头绕过反爬
很多体育类网站会检测请求的User-Agent字段,判断是否为爬虫。你可以手动设置成主流浏览器的标识,同时补充常见的请求头字段:Document doc = Jsoup.connect("https://www.sports.com/soccer/scoreboard") .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("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3") .get();携带会话Cookie请求目标页面
部分网站会要求验证会话Cookie,你可以先请求主页获取合法Cookie,再带着Cookie访问比分板页面:// 先请求主页获取会话Cookie Response homeResp = Jsoup.connect("https://www.sports.com") .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") .execute(); // 携带Cookie请求目标页面 Document doc = Jsoup.connect("https://www.sports.com/soccer/scoreboard") .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") .cookies(homeResp.cookies()) .get();检查是否被主动重定向
你可以关闭Jsoup的自动跳转功能,查看响应状态码和重定向地址,确认是否是网站主动把你导向主页:Response resp = Jsoup.connect("https://www.sports.com/soccer/scoreboard") .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") .followRedirects(false) .execute(); System.out.println("响应状态码:" + resp.statusCode()); System.out.println("重定向地址:" + resp.header("Location"));如果返回302状态码且重定向到主页,说明网站的反爬逻辑触发了,需要结合上面的请求头、Cookie方案优化。
确认目标页面路由是否变更
虽然你说之前正常,但也有可能网站调整了页面路径,建议手动在浏览器打开https://www.sports.com/soccer/scoreboard,确认页面是否还存在,避免是URL失效导致的跳转。
内容的提问来源于stack exchange,提问作者carwah
相关产品推荐
相关产品推荐

