我正在尝试使用Java下载www.pandora.com/profile/stations/olin_d_kirkland HTML,以匹配从Chrome的网页的上下文菜单中选择“查看页面源代码”时得到的内容。

现在,我知道如何使用Java下载网页HTML源代码。我已经完成了downloads.nl并在其他站点上对其进行了测试。但是,潘朵拉是个谜。我的最终目标是从Pandora帐户解析“Stations”。

具体来说,我想从www.pandora.com/profile/stations/olin_d_kirkland之类的网站上获取站点名称

我曾尝试使用Java中的Selenium库和内置的URL getter,但是当我应该获得5300时,我只能得到约4700行代码。更不用说代码中没有个性化数据,这就是我的意思。我在寻找。

我发现这不是我没有抓住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上喜欢的所有歌曲的完整列表。

最佳答案

Pandora页面是使用Ajax大量构建的,因此许多刮板都在挣扎。在上面显示的情况下,查看电台列表,该页面实际上通过了一个辅助请求以:

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'参数来翻阅结果。

关于java - 使用Java下载Pandora源代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11633787/

10-10 18:37