Jsoup获取网页图片绝对路径遇阻,abs:src用法求助
解决Jsoup获取图片绝对路径的问题
你遇到的核心问题是没有给Jsoup的Document设置基础URI(Base URI),直接用Jsoup.parse(html)解析字符串的话,Jsoup不知道相对路径应该基于哪个域名来拼接,所以abs:src自然无法生效。下面给你具体的修改方案:
关键修改点
- 解析HTML时,必须传入目标网站的基础URL作为第二个参数,让Jsoup明确相对路径的基准域名
- 获取属性时使用
abs:src替代src,就能直接拿到拼接好的绝对路径
修改后的完整代码
<cfhttp method="get" url="https://theculturecook.com/recipe-slowroasted-pork-belly.html" result="theresult"> <cfscript> Jsoup = createObject("java", "org.jsoup.Jsoup"); html = "#theresult.filecontent#"; // 传入网站基础URI作为第二个参数,是abs:src生效的核心 doc = Jsoup.parse(html, "https://theculturecook.com/"); tags = doc.select("img[src$=.jpg]"); </cfscript> <cfset images = ""> <cfloop index="e" array="#tags#"> <cfoutput> // 使用abs:src获取绝对路径 <cfset images = ListAppend(images, e.attr("abs:src"))> </cfoutput> </cfloop> <cfloop list="#images#" index="a"> <cfoutput>#a#<br></cfoutput> </cfloop>
灵活优化方案
如果你的目标页面URL可能动态变化,也可以直接用cfhttp返回的请求URL作为base URI,这样不用硬编码域名:
doc = Jsoup.parse(html, theresult.url);
这样修改后,你就能顺利获取到所有图片的完整绝对路径了~
内容的提问来源于stack exchange,提问作者Marthinus Strydom
相关产品推荐
相关产品推荐

