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 回答