【问题标题】:How to load HTML after content has been loaded加载内容后如何加载 HTML
【发布时间】:2018-02-14 13:05:50
【问题描述】:

我正在尝试获取网站上的内容列表(this one,如果有人感兴趣)。布局最近发生了变化,现在他们不会一次加载所有内容,而是使用魔法(可能是 js)。我目前正在使用JSoup 来分析 HTML,但我愿意接受建议。

这就是我得到的:

<div class="row" data-v-6e4dbe9e>
 <div class="col-17 podcasts-group" data-v-6e4dbe9e>
  <div class="loading-spinner" data-v-6e4dbe9e>      //the devil himself
   <div class="spinner" data-v-ac3cb376 data-v-6e4dbe9e>
    <div class="rect1" data-v-ac3cb376></div>
    <div class="rect2" data-v-ac3cb376></div>
    <div class="rect3" data-v-ac3cb376></div>
    <div class="rect4" data-v-ac3cb376></div>
    <div class="rect5" data-v-ac3cb376></div>
   </div>
  </div>
  <div mode="in-out" class="transition-group row" data-v-6e4dbe9e>
   //Here should be stuff!
  </div>
 </div>
</div>

实现这一点的代码:

String selector = "div.podcasts-items";
Elements elem = Jsoup.connect(link).get().select(selector)
System.out.println("html: "+elem.html());

这是我希望看到的(在页面加载完所有内容后从检查元素复制):

<div class="row" data-v-6e4dbe9e>
 <div class="col-17 podcasts-group" data-v-6e4dbe9e>
  <!---->  //begone evil!
  <div mode="in-out" class="transition-group row" data-v-6e4dbe9e>
   <div class="col-17 col-md-8 center-margin" data-v-6e4dbe9e="">...</div>
   <div class="col-17 col-md-8 center-margin" data-v-6e4dbe9e="">...</div>
   <div class="col-17 col-md-8 center-margin" data-v-6e4dbe9e="">...</div>
   <div class="col-17 col-md-8 center-margin" data-v-6e4dbe9e="">...</div>
  </div>
 </div>
</div>

Google 帮不上什么忙,因为每个与微调器等相关的内容都是关于 javascript 的。

解决方案:

由于 JSoup 只加载 HTML 而不会执行任何 javascript,因此页面从来没有机会加载内容。您必须使用实际的浏览器引擎或像 selenium 这样的网络驱动程序来加载数据。

对于这个特定问题,我可以通过此网页的 API 加载 Json 数据直接获取内容。

【问题讨论】:

  • 寻找这个? br.de/mediathek/podcast/api/…(通过浏览器的网络选项卡找到)
  • 如果您只获得 HTML 标记并且网站是用 JS 构建的,您将看不到任何内容。你需要一个更健壮的解决方案,例如像 PhantomJS 这样的无头浏览器,它可以加载包括脚本在内的整个页面,解释所有内容,然后输出整个结果。
  • @Chris G 哇,谢谢。我正在更新一个旧程序,甚至不知道他们有一个 API。我去看看。
  • 尝试简单的 Javacript 或 JQUERY Ajax 请求来提取 HTML 。这个过程将让网站执行脚本并填充 div,现在使用 JSOUP 来解析 HTML

标签: javascript java html


【解决方案1】:

如果我理解您的问题,那么您最好的选择是使用 Selenium 驱动程序。 Link to similar question

【讨论】:

  • 感谢您的链接。现在我知道为什么它不起作用了。不过,我想我会使用他们的 API 来解决这个特定问题。
猜你喜欢
  • 1970-01-01
  • 2011-07-21
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多