JSoup - 提取图像只能找到第一个图像

时间:2014-12-23 00:49:07

标签: android image jsoup

我目前正在使用JSoup从一些网站中提取各种内容。我虽然对图像有困难。

html代码就是这样的:

<div id="bK5ZEcg" class="post">
   <a class="image-list-link" href="/r/GetMotivated/bK5ZEcg" data-page="0">
     <img alt="" src="//i.imgur.com/bK5ZEcgb.jpg" original-title="">
   </a>
</div>

网页是一个图库,上面为每个图片发布相同的代码及其各自的链接。

我已经编写了如下代码,查找以“。jpg”结尾的图像,以查找页面上的所有图像并将其提取到数组中。

protected ArrayList<String> doInBackground(ArrayList<String>... params) 
    {
        // TODO Auto-generated method stub

        try
        {
            Document doc = Jsoup.connect(url).get();
            Log.d("JSoup Connection", "connected...");


            //Extract images from site
            Elements elemImages = doc.select("img[src$=.jpg]");


            for(Element e : elemImages)
            {
                Log.d("Single Image",e.absUrl("src"));

                //Will add to array later, just trying to get output for now
                //receivedImages.add(e.absUrl("src").toString());
            }

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        Log.d("Image collect", "Images Collected");
        return receivedImages;

    }

当我运行我的代码时,它只能在网站上找到一个图像,尽管有许多图像要提取。

12-22 19:43:48.275: I/System.out(786): connected...
12-22 19:43:48.335: D/Single Image(786): http://i.imgur.com/rCjTX81l.jpg
12-22 19:43:48.335: D/Image collect(786): Images Collected

我已经有一段时间了,现在调试并尝试不同的选择语法。任何人都可以帮助我或指出我正确的方向吗?

还原谅我的草率编码..我仍然在掌握Android开发。

非常感谢

编辑:忘了包括我正在解析的网站。 http://imgur.com/r/GetMotivated

2 个答案:

答案 0 :(得分:0)

确定。所以我设法重现了它。如果您在桌面上运行此功能,但是模拟移动设备并抓取移动网站,则只能获得一个图标

Document doc = Jsoup.connect("http://m.imgur.com/r/GetMotivated").userAgent("Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30").get();

解决方案是指定一个不同的用户代理,它属于桌面浏览器并刮擦桌面网站,而不是移动桌面网站。试试这个

Document doc = Jsoup.connect("http://imgur.com/r/GetMotivated")
                    .userAgent("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36")
                    .get();

为什么会发生这种情况的原因是由于移动网站的客户端html生成。 在桌面上打开chrome,转到开发工具,打开移动模拟器并访问移动网站。 按ctrl + u,这是jsoup解析的html,你会看到内容不是 最终确定,但有很多标签(角度?)对jsoup没用。

通过指定桌面用户代理,您要求提供网站的桌面版本,以不同的方式生成html,这对jsoup很有用。请记住,jsoup将在chrome上按ctrl + u解析你看到的任何内容,仅此而已。

答案 1 :(得分:0)

尝试使用“ first()”:

Elements elemImages = doc.select("img[src$=.jpg]");
elemImages.first();