我目前正在尝试开发一个应用程序,它访问以下网站(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用于显示图像的经验。
非常感谢你。
答案 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中提取图像。图像已下载并显示。