7
回答
用JSOUP提取网页中的链接,如何遇到相对路径问么处理?
开发十年,就只剩下这套Java开发体系了   
现在在做一个简单的聚焦爬虫,在抓取http://product.pconline.com.cn/mobile/这个网页的时候提取出很多相对链接。想问一下,用JSOUP如何处理相对链接,我用Jsoup.parse(content,baseURL)这种方式貌似处理不了,在网上查的是这样解决,也不知道是不是我理解错了,如果用正则去判断是否是相对路径,如果是则加上基础路径,这样的方式也行的同,不过感觉好像不太优雅:-)。如果JSOUP有解决这种问题的方法最好了。哪位大侠指点一下。不胜感激!!
举报
Anterior
发帖于7年前 7回/2K+阅
共有7个答案 最后回答: 7年前
加上 abs, 类似这样        pre=ele.getElementById("a_01").attr("abs:href")
--- 共有 1 条评论 ---
Anterior试过abs:的方法,但是出现的问题是相对路径没有抓取下来,类似这样的情况: 奥克斯: 爱摩登: 埃立特: 爱国者: 艾炜特: 步步高: 链接是空的 7年前 回复

引用来自“君无畏”的答案

加上 abs, 类似这样        pre=ele.getElementById("a_01").attr("abs:href")

代码是这样写的,content就是抓取下来的页面内容

Document doc = Jsoup.parse(content);

        Elements links = doc.getElementsByTag("a");
        if (!links.isEmpty()) {
            for (Element link : links) {
                String linkHref = link.attr("abs:href");
                String linkText = link.text();
                urlMap.put(linkHref, linkText);
                System.out.println(linkText + ":" + linkHref);
            }
        }
奥克斯 :  http://product.pconline.com.cn/mobile/aux/
-------------
爱摩登 :  http://product.pconline.com.cn/mobile/aimodeng/
-------------
埃立特 :  http://product.pconline.com.cn/mobile/ailite/
-------------
爱国者 :  http://product.pconline.com.cn/mobile/aigo/
测试代码和你基本一样
Document doc = Jsoup.parse(content,"http://product.pconline.com.cn/");
.........
String linkHref = link.absUrl("href");

就好了

引用来自“Andre.Z”的答案

Document doc = Jsoup.parse(content,"http://product.pconline.com.cn/");
.........
String linkHref = link.absUrl("href");

就好了

Document doc = Jsoup.parse(content,"http://product.pconline.com.cn/mobile/");
        Elements links = doc.getElementsByTag("a");
        if (!links.isEmpty()) {
            for (Element link : links) {
                String linkHref = link.absUrl("href");
                String linkText = link.text();
                urlMap.put(linkHref, linkText);
                System.out.println(linkText + ":" + linkHref);
            }

        }

这样OK了 ,谢谢

引用来自“君无畏”的答案

奥克斯 :  http://product.pconline.com.cn/mobile/aux/
-------------
爱摩登 :  http://product.pconline.com.cn/mobile/aimodeng/
-------------
埃立特 :  http://product.pconline.com.cn/mobile/ailite/
-------------
爱国者 :  http://product.pconline.com.cn/mobile/aigo/
测试代码和你基本一样
Document doc = Jsoup.parse(content,"http://product.pconline.com.cn/mobile/");
        Elements links = doc.getElementsByTag("a");
        if (!links.isEmpty()) {
            for (Element link : links) {
                String linkHref = link.absUrl("href");
                String linkText = link.text();
                urlMap.put(linkHref, linkText);
                System.out.println(linkText + ":" + linkHref);
            }

        }

按照您说的方法解决了,谢谢:-)

顶部