Java 需要从HTML页面解析图像src,然后显示它

Java 需要从HTML页面解析图像src,然后显示它,java,android,html,image,parsing,Java,Android,Html,Image,Parsing,我目前正在尝试开发一个应用程序,它可以访问以下站点(Http://lulpix.com)并解析HTML并从以下部分获取img src <div class="pic rounded-8" style="overflow:hidden;"><div style="margin:0 0 36px 0;overflow:hidden;border:none;height:474px;"><img src="**http://lulpix.com/images/2012/A

我目前正在尝试开发一个应用程序,它可以访问以下站点(Http://lulpix.com)并解析HTML并从以下部分获取img src

<div class="pic rounded-8" style="overflow:hidden;"><div style="margin:0 0 36px 0;overflow:hidden;border:none;height:474px;"><img src="**http://lulpix.com/images/2012/April/13/4f883cdde3591.jpg**" alt="All clogged up" title="All clogged up" width="319"/></div></div>

当然,每次加载页面时它都是不同的,所以我不能给异步图像库提供一个直接的URL,例如,这就是我想要做的

加载页面>解析img src>将异步下载到imageview>重新加载lulpix.com>重新启动

然后将它们分别放在图像视图中,用户可以从中左右滑动浏览

因此,TL;问题的关键是,我如何解析html来检索URL,是否有人有过使用libarys显示图像的经验


非常感谢你。

这里有一个异步任务连接到lulpix,伪造了一个推荐人和用户代理(lulpix试图用一些非常蹩脚的检查来阻止抓取)。在您的
活动中这样开始

new ForTheLulz().execute();
生成的
位图
是以一种非常蹩脚的方式下载的(没有缓存或检查图像是否已经被DL:ed了)&错误处理总体上是不存在的-但是基本概念应该是可以的

class ForTheLulz extends AsyncTask<Void, Void, Bitmap> {
        @Override
        protected Bitmap doInBackground(Void... args) {
            Bitmap result = null;
            try {
                Document doc = Jsoup.connect("http://lulpix.com")
                        .referrer("http://www.google.com")
                        .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                        .get();
                        //parse("http://lulpix.com");
                if (doc != null) {
                    Elements elems = doc.getElementsByAttributeValue("class", "pic rounded-8");
                    if (elems != null && !elems.isEmpty()) {
                        Element elem = elems.first();
                        elems = elem.getElementsByTag("img");
                        if (elems != null && !elems.isEmpty()) {
                            elem = elems.first();
                            String src = elem.attr("src");
                            if (src != null) {
                                    URL url = new URL(src);
                                    // Just assuming that "src" isn't a relative URL is probably stupid.
                                    InputStream is = url.openStream();
                                    try {
                                        result = BitmapFactory.decodeStream(is);
                                    } finally {
                                        is.close();
                                    }
                            }
                        }
                    }
                }
            } catch (IOException e) {
                // Error handling goes here
            }
            return result;
        }
        @Override
        protected void onPostExecute(Bitmap result) {
            ImageView lulz = (ImageView) findViewById(R.id.lulpix);
            if (result != null) {
                lulz.setImageBitmap(result);
            } else {
                //Your fallback drawable resource goes here
                //lulz.setImageResource(R.drawable.nolulzwherehad);
            }
        }
    }
ForTheLulz类扩展了异步任务{ @凌驾 受保护位图doInBackground(无效…参数){ 位图结果=空; 试一试{ Document doc=Jsoup.connect(“http://lulpix.com") .推荐人(”http://www.google.com") .userAgent(“Mozilla/5.0(Windows;U;WindowsNT 5.1;en-US;rv1.8.1.6)Gecko/20070725 Firefox/2.0.0.6”) .get(); //解析(“http://lulpix.com"); 如果(doc!=null){ Elements elems=doc.getElementsByAttributeValue(“类”,“pic四舍五入-8”); if(elems!=null&&!elems.isEmpty()){ Element elem=elems.first(); elems=elem.getElementsByTag(“img”); if(elems!=null&&!elems.isEmpty()){ elem=elems.first(); 字符串src=elem.attr(“src”); 如果(src!=null){ URL=新URL(src); //仅仅假设“src”不是一个相对URL可能是愚蠢的。 InputStream=url.openStream(); 试一试{ 结果=BitmapFactory.decodeStream(is); }最后{ is.close(); } } } } } }捕获(IOE异常){ //错误处理在这里进行 } 返回结果; } @凌驾 受保护的void onPostExecute(位图结果){ ImageView lulz=(ImageView)findViewById(R.id.lulpix); 如果(结果!=null){ lulz.setImageBitmap(结果); }否则{ //您的后备可提取资源位于此处 //lulz.setImageResource(R.drawable.nolulzwherehad); } } }
我最近使用JSoup解析无效的HTML,效果很好!做一些像

    Document doc = Jsoup.parse(str);
    Element img = doc.body().select("div[class=pic rounded-8] img").first();
    String src = img.attr("src");

使用“选择器字符串”来获得正确的结果,但我认为上面的方法会起作用。它首先根据其
属性的值选择外部
div
,然后选择任何子代
img
元素。

无需使用webview立即检查此示例项目


在这个示例项目中,我正在解析html和图像标记,而不是从图像URL提取图像。图像已下载并显示。

考虑使用JSoup,这是一种非常可靠的解析“TheWild”中HTML的方法。我正在寻找JSoup,虽然我似乎找不到一种解析方法,但我可以正确使用。我来做一个,非常简单。非常有用!但是我们能成功地测试它吗?每次hmmyup时,我似乎都会得到一个空结果。尝试打印结果文档,toString()将显示您从服务器接收到的内容。我觉得非常愚蠢!啊哈,我犯了这么愚蠢的错误,对不起,我蜷缩在角落里哭泣。工作很漂亮,非常感谢@BhavikAmbani:是一个HTML处理库,也就是说,它会很高兴地吃掉世界各地的web“开发人员”大量生产的丑陋、畸形的垃圾。例如,用于抓取网页。这正是我尝试过的,但是我得到了一个持久的NullPointerExeception,呵呵,这个表达式一定不对,我想。。。试着先得到div;“div[class=pic-8]”