2

open.spotify からアルバム アートへの画像リンクをスクレイピングする必要があるプロジェクトに取り組んでいます。

例: http://open.spotify.com/track/296mPMQavmf1vvxYrUvLN8

この例では、次のタグを探しています。<img id="cover-art" src="http://o.scdn.co/image/ff3874d40abf6e6e7763e39bdb2003cf503cba10">

正規表現からの出力として、私はこれが欲しいです:http://o.scdn.co/image/ff3874d40abf6e6e7763e39bdb2003cf503cba10

私はこれをしばらくの間機能させようとしてきましたが、私の解決策は常に2〜3ステップ以上で発生します。私はまだ正規表現を学んでおり、これを解決する方法がわかりません。

任意の提案をいただければ幸いです。

4

2 に答える 2

2

通常、HTMLの解析に正規表現を使用するべきではありません。代わりにJSoupを使用してみてください-もう少し実用的です。

jsoup JARをフェッチし、プロジェクトに追加して、次のようにします。

class SpotifyTask extends AsyncTask<String, Void, List<String>> {
    @Override
    protected List<String> doInBackground(String... params) {
        ArrayList<String> res = new ArrayList<String>();
        try {
            Document doc = Jsoup.connect(params[0]).get();
            // CSS-style selectors are your new best friend when scraping!
            Elements coverArts = doc.select("img[id=cover-art]");
            for (Element coverArt : coverArts) {
                String url = coverArt.absUrl("src");
                if (!TextUtils.isEmpty(url)) {
                    res.add(url);
                }
            }
        } catch (IOException e) {
            Log.w(TAG, "Error processing document", e);
        }
        return res;
    }
    @Override
    protected void onPostExecute(List<String> result) {
        Log.i(TAG, "Do something with your links: " + result);
    }
}

あなたの活動でこのように始めてください:

new SpotifyTask().execute("http://open.spotify.com/track/296mPMQavmf1vvxYrUvLN8");
于 2012-05-22T07:04:07.457 に答える
1

ページ全体を文字列に読み込むと、この正規表現でうまくいくはずです。

id="cover-art" src="([^"]+?)"

'id = "cover-art" src = "'に固定され、次の'"'まですべてを一致1として読み取ります。これにより、画像のURLのみが表示されます。

好みのマッチングの選択に応じて、次のように必要なアンカータグを付けることができます。

^.*id="cover-art" src="([^"]+?)".*$

これが必要なのは、Javaの一部の一致するクラスは常に文字列全体を一致させたいためですが、最初の正規表現では一致しません。

于 2012-05-22T07:03:28.487 に答える