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

时间:2012-04-14 12:41:59

标签: 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/April/13/4f883cdde3591.jpg**" alt="All clogged up" title="All clogged up" width="319"/></div></div>

每次加载页面时它当然都不一样,所以我不能给出我想要做的图像异步库的直接URL,例如

加载页面&gt;解析img src&gt;下载ASync到imageview&gt;重新加载lulpix.com&gt;重新开始

然后将其中的每一个放置在图像视图中,用户可以从中向左和向右滑动以进行浏览。

所以TL; DR就是这样,我如何解析html来检索URL,并且任何人都有任何libarys用于显示图像的经验。

非常感谢你。

3 个答案:

答案 0 :(得分:3)

这是一个连接到lulpix的AsyncTask,伪造了一个引用者&amp;用户代理(lulpix试图用一些非常蹩脚的检查来阻止抓取)。在Activity

中以这样的方式开始
new ForTheLulz().execute();

生成的Bitmap以非常蹩脚的方式下载(没有缓存或检查图像是否已经是DL:ed)&amp;错误处理总体上是不存在的 - 但基本概念应该没问题。

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);
            }
        }
    }

答案 1 :(得分:0)

我最近使用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属性的值选择外部class,然后选择任何后代img元素。

答案 2 :(得分:0)

现在无需使用Webview检查此示例项目

https://github.com/meetmehdi/HTMLImageParser.git

在此示例项目中,我将解析html和image标签,而不是从图像URL中提取图像。图像已下载并显示。