3

www.pandora.com/profile/stations/olin_d_kirklandChromeのWebページのコンテキストメニューから[ページソースの表示]を選択したときに取得するものと一致するように、JavaでHTMLをダウンロードしようとしています。

これで、Javaを使用してWebページのHTMLソースコードをダウンロードする方法がわかりました。私はdownloads.nlでそれを行い、他のサイトでテストしました。しかし、パンドラは謎に包まれています。私の最終的な目標は、Pandoraアカウントから「ステーション」を解析することです。

具体的には、次のようなサイトから駅名を取得したいwww.pandora.com/profile/stations/olin_d_kirkland

セレンライブラリと組み込みのURLゲッターをJavaで使用しようとしましたが、5300を取得する必要があるときに、最大4700行のコードしか取得できません。コードにパーソナライズされたデータがないことは言うまでもありません。 m探しています。

JavaScriptを取得したり、JavaScriptを最初に実行したりしていないのではないかと思いましたが、JavaScriptがコードに読み込まれるのを待っていても、常に同じ結果が得られるだけでした。

可能であれば、文字列を返す「grabPageSource()」というメソッドが必要です。呼び出されたときにソースコードを返す必要があります。


public class PandoraStationFinder {
    public static void main(String[] args) throws IOException, InterruptedException {
        String s = grabPageSource();
        String[] lines = s.split("\n\r");
        String t;
        ArrayList stations = new ArrayList();
        for (int i = 0; i < lines.length; i++) {
            t = lines[i].trim();
            Pattern p = Pattern.compile("<a href=\"/station/\\d+\">[\\w\\s]+</a>");
            Matcher m = p.matcher(t);
            if (m.matches() ? true : false) {
                Station someStation = new Station(t);
                stations.add(someStation);
                // System.out.println("I found a match on line " + i + ".");
                // System.out.println(t);
            }
        }
    }

    public static String grabPageSource() throws IOException {
        String fullTxt = "";
        // Get HTML from www.pandora.com/profile/stations/olin_d_kirkland
        return fullTxt;
    }
}

それがどのように行われるかは関係ありませんが、最終製品で、Pandoraのユーザーが気に入ったすべての曲の包括的なリストを取得したいと思います。

4

2 に答える 2

4

Pandoraページはajaxを使用して大量に構築されているため、多くのスクレーパーが苦労しています。上に示した場合、ステーションのリストを見ると、ページは実際に次の2番目のリクエストを送信します。

http://www.pandora.com/content/stations?startIndex=0&webname=olin_d_kirkland

リクエストを実行したが、メインサイトではなくそのURLをポイントした場合、スクレイピングの方がはるかに幸運になると思います。

同様に、「いいね」にアクセスするには、次のURLが必要です。http: //www.pandora.com/content/tracklikes?likeStartIndex = 0&thumbStartIndex = 0&webname = olin_d_kirkland

これにより、5つのグループでお気に入りのトラックがプルバックされますが、「thumbStartIndex」パラメーターを増やすことで結果をページングできます。

于 2012-10-23T05:48:57.840 に答える
2

正確な答えではありませんが、うまくいけば、これで正しい方向に進むことができます。

私がこの種のことに入るときはいつでも、私は常にHTTP監視ツールに頼ります。私はFirefoxを使用しており、LiveHTTPヘッダー拡張機能が本当に気に入っています。前後に移動しているヘッダーを確認し、それに応じてhttpリクエストを調整します。絶対的な最低レベルのテストとして、成功したリクエストからヘッダーを取得し、telnetを使用してポート80に送信し、何が返されるかを確認します。

于 2012-07-30T02:42:04.873 に答える