我目前正在尝试开发一个应用程序,它可以访问以下网站(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 > 下载 ASync 到 imageview > 重新加载 lulpix.com > 重新开始
然后将它们中的每一个放置在图像视图中,用户可以从中左右滑动进行浏览。
所以,这里的 TL;DR 是,我如何解析 html 以检索 URL,以及是否有人有使用库来显示图像的经验。
非常感谢你。
这是一个连接到 lulpix 的 AsyncTask,伪造了一个引荐来源网址和用户代理(lulpix 显然试图用一些相当蹩脚的检查来阻止抓取)。像这样开始在你的Activity
:
new ForTheLulz().execute();
所结果的Bitmap
以相当蹩脚的方式下载(没有缓存或检查图像是否已经是 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);
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)