我目前正在使用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答案 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();