html根据Xpath取得内容的java实现

最近再写一个android音乐播放器应用,因为需要获得歌手的头像图片,在没有找到合适的获取歌手信息API的情况下,打算直接用百度百科中的歌手头像来实现。这里也就是利用Xpath来获取歌手图片的链接地址了。

这里直接通过一个实例来演示一下如何去实现:

首先在百度中输入地址:"http://www.baidu.com/swd=%周杰伦"可以打开歌手的百度搜索首页,然后一开始的就是百度百科的头像。


然后通过审查图片的元素,可以得到图片资源的Xpath,也就是该链接地址在该Html中的地址,这里得到的是:"//*[@id="1"]/div[1]/div[1]/a/img",得到Xpath之后,就可以通过将该html下载下来,然后通过解析获得想要的内容。

public void parseHTML() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    HttpClient httpClient = new DefaultHttpClient();
                    HttpGet httpGet = new HttpGet("http://www.baidu.com/s?wd=" + "周杰伦");
                    HttpResponse httpResponse = httpClient.execute(httpGet);

                    HttpEntity entity = httpResponse.getEntity();
                    String response = EntityUtils.toString(entity);

                    TagNode tagNode = new HtmlCleaner().clean(response);
                    org.w3c.dom.Document doc = new DomSerializer(new CleanerProperties()).createDOM(tagNode);
                    XPath xpath = XPathFactory.newInstance().newXPath();
                    String str = (String) xpath.evaluate("//*[@id=\"1\"]/div[1]/div[1]/a/img/attribute::src", doc, XPathConstants.STRING);
                    String url = android.text.Html.fromHtml(str).toString();
                    System.out.println(url);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
这里是先通过HttpClient下载所要访问的Html资源,然后将其下载下来,在通过HtmlCleaner将html网页转化为标准格式的XML文件。这是HtmlCleaner的官网:http://htmlcleaner.sourceforge.net/,在这里你可以下载HtmlCleaner的Jar包,将其导入即可,官网也有使用的文档教程。再接下来通过Xpath的解析方法,将其解析即可,这里的Xpath我将其补充具体到了链接地址了: //*[@id=\"1\"]/div[1]/div[1]/a/img/attribute::src,解析出来后,由于是html的链接地址,里面可能含有一些非链接符号的转义字符等等,所以通过 android.text.Html.fromHtml(str).toString()方法可以将其转化为一个标准的链接地址。这里的内容并不多,其实主要就是照着这样的方法去写就行了,挺简单的,结果就不打印了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JsoupXpath 是一款纯Java开发的使用xpath解析html解析器,xpath语法分析与执行完全独立,html的DOM树生成借助Jsoup,故命名为JsoupXpath.为了在java里也享受xpath的强大与方便但又苦于找不到一款足够强大的xpath解析器,故开发了JsoupXpath。JsoupXpath实现逻辑清晰,扩展方便,支持几乎全部常用的xpath语法.http://www.cnblogs.com/ 为例 "//a/@href"; "//div[@id='paging_block']/div/a[text()='Next >']/@href"; "//div[@id='paging_block']/div/a[text()*='Next']/@href"; "//h1/text()"; "//h1/allText()"; "//h1//text()"; "//div/a"; "//div[@id='post_list']/div[position()1000]/div/h3/allText()"; //轴支持 "//div[@id='post_list']/div[self::div/div/div/span[@class='article_view']/a/num()>1000]/div/h3/allText()"; "//div[@id='post_list']/div[2]/div/p/preceding-sibling::h3/allText()"; "//div[@id='post_list']/div[2]/div/p/preceding-sibling::h3/allText()|//div[@id='post_list']/div[1]/div/h3/allText()"; 在这里暂不列出框架间的对比了,但我相信,你们用了会发现JsoupXpath就是目前市面上最强大的的Xpath解析器。 快速开始 如果不方便使用maven,可以直接使用lib下的依赖包跑起来试试,如方便可直接使用如下dependency(已经上传至中央maven库,最新版本0.1.1):    cn.wanghaomiao    JsoupXpath    0.1.1 依赖配置好后,就可以使用如下例子进行体验了!String xpath="//div[@id='post_list']/div[./div/div/span[@class='article_view']/a/num()>1000]/div/h3/allText()";String doc = "..."; JXDocument jxDocument = new JXDocument(doc); List<Object> rs = jxDocument.sel(xpath); for (Object o:rs){     if (o instanceof Element){             int index = ((Element) o).siblingIndex();             System.out.println(index);     }     System.out.println(o.toString()); } 其他可以参考 cn.wanghaomiao.example包下的例子 语法 支持标准xpath语法(支持谓语嵌套),支持全部常用函数,支持全部常用轴,去掉了一些标准里面华而不实的函数和轴,下面会具体介绍。语法可以参考http://www.w3school.com.cn/xpath/index.asp 关于使用Xpath的一些注意事项 非常不建议直接粘贴Firefox或chrome里生成的Xpa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值