1

私は現在、次のサイト(Http://lulpix.com)にアクセスし、HTMLを解析して、次のセクションからimgsrcを取得するアプリを開発しようとしています。

<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を指定することはできません。

ページの読み込み>imgsrcの解析>ImageviewへのASyncのダウンロード>lulpix.comの再読み込み>再起動

次に、これらをそれぞれ画像ビューに配置し、ユーザーが左右にスワイプして閲覧できるようにします。

つまり、これのTL; DRは、HTMLを解析してURLを取得し、画像を表示するためのライブラリを使用した経験を誰にでも持たせるにはどうすればよいかということです。

どうもありがとうございました。

4

3 に答える 3

3

これは、lulpix に接続し、リファラーとユーザー エージェントを偽装する AsyncTask です (lulpix は、明らかに不十分なチェックでスクレイピングをブロックしようとします)。あなたの中で次のように始まりますActivity

new ForTheLulz().execute();

結果Bitmapはかなり不十分な方法でダウンロードされます(画像が既にDLされているかどうかのキャッシュやチェックはありません)。エラー処理は全体的にかなり存在しませんが、基本的な概念は問題ありません.

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);
            }
        }
    }
于 2012-04-14T13:20:53.783 に答える
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エレメントを選択します。

于 2012-04-14T13:24:26.230 に答える