Web scraping JSoup刷新页面

Web scraping JSoup刷新页面,web-scraping,jsoup,refresh,Web Scraping,Jsoup,Refresh,我对JSoup有意见。 我想做一个小项目,从一个广播网页上读出数据。我想读当前播放的歌曲和艺人的名字。(页面是:)现在它或多或少可以工作。我唯一的问题是,有时候当歌曲改变时,我并不总是能得到新的数据。。有没有办法告诉Jsoup重新加载页面或其他内容,以便我获得新数据 我的代码: private void getData(){ try{ Document doc = Jsoup.connect("https://www.radiopilatus.ch/").get();

我对JSoup有意见。 我想做一个小项目,从一个广播网页上读出数据。我想读当前播放的歌曲和艺人的名字。(页面是:)现在它或多或少可以工作。我唯一的问题是,有时候当歌曲改变时,我并不总是能得到新的数据。。有没有办法告诉Jsoup重新加载页面或其他内容,以便我获得新数据

我的代码:

private void getData(){
    try{
        Document doc = Jsoup.connect("https://www.radiopilatus.ch/").get();

        //Artist
        Elements ereignisse = doc.select("#content > div:nth-child(2) > div > div.tile.livecenter > div > div.last-played > div > div.col-sm-8.title > span.artist");

        for(Element e : ereignisse){
            currSongArtist = e.text();
        }

        //Titel
        ereignisse = doc.select("#content > div:nth-child(2) > div > div.tile.livecenter > div > div.last-played > div > div.col-sm-8.title > span.song");

        for(Element e : ereignisse){
            currSongTitle = e.text();
        }
        doc = null;
    }catch(IOException e){
        e.printStackTrace();
    }

}

我重新编码并使用JSON Simple解析JSON文件,而不是HTML文件

我的更新代码:

  private void getData() {
try {
  String url = "http://player.radiopilatus.ch/data/generated_content/pilatus/production/playlist/playlist_radiopilatus.json";
  String jsonURL = IOUtils.toString(new URL(url));
  //FileReader reader = new FileReader(jsonURL);
  JSONParser jsonParser = new JSONParser();
  JSONObject jsonObject = (JSONObject)jsonParser.parse(jsonURL);

  JSONArray playing = (JSONArray)jsonObject.get("live");
  Iterator i = playing.iterator();

  while (i.hasNext()) {
    JSONObject innerObj = (JSONObject)i.next();
    currSongTitle = (String)innerObj.get("title");
    currSongArtist = (String)innerObj.get("interpret");
  }
} catch (Exception e) {
  System.err.println(e);
  }
}

Thx向MCL寻求帮助:)

如果您查看一下,您会注意到这是一个无状态协议。也就是说,没有现成的功能在页面更新后自动刷新页面。因此,您需要自己完成这项工作,或者定期加载页面(我认为每10秒加载一次是可以接受的)。或者,更优雅地说,如果你能够确定当前曲目的剩余时间,你可以推断下一首曲目何时播放,从而产生最小数量的请求。我将尝试更大的更新时间。我认为我无法确定当前播放曲目的剩余时间,因为我只读取HTML,而在HTML中没有关于曲目长度的信息。Thx的帮助:)为什么一个更大的间隔?最糟糕的情况是歌曲标题在开始播放10秒后被更新,这并不是无关紧要的,更不用说20秒或更长的时间了。无论如何,请查看此url:。JSON更容易解析,产生的流量也少得多。这将使您能够减少时间间隔。您建议我使用哪个库来解析JSON?因为我读到JSoup不是用来解析json的,做得很好。但为什么你要循环使用
数据。直播
并简单地覆盖艺术家和标题?更合理的方法是以下两种方法之一:1)假设一个时间点只播放一首歌曲,通常提取第一个(也是唯一一个)条目:
title=playing.get(0.get(“title”)
(我不关心这里的类型转换)。2) 您希望为多个条目的可能性敞开大门,在这种情况下,您希望将所有条目都存储在
ArrayList
中,甚至只是重用
playing
对象本身。最后一个问题:您是如何获得JSON文件的路径的?网络分析。在本例中,我将HttpFox与FireFox一起使用。Chrome在开发者控制台中有一个内置的标签,我觉得很不方便。对于窗户,还有小提琴手。过程基本上都是一样的:导航到站点/源,查看加载了哪些资源。JSON/XML和JS文件经常充当感兴趣的负载的容器。顺便说一句:我还是不喜欢你代码中的循环;)