【问题标题】:Web scraping of modal window(dialogue box) using jsoup使用 jsoup 对模态窗口(对话框)进行 Web 抓取
【发布时间】:2015-07-15 10:39:42
【问题描述】:

我正在研究我必须从网站中提取数据的项目。该项目是java,网站是java script。我正在使用Jsoup从网站中提取数据但是网页中存在一些模态窗口(对话框,弹出窗口)。那么是否可以使用jsoup提取模态窗口的数据?????? 所以如果答案是肯定的,那我该怎么做呢?请提供链接,如果没有,那么其他最好的方法是什么???

感谢您的帮助。我真的很感激。

【问题讨论】:

  • 您是否必须运行 javascript 才能显示模式对话框?如果是这样,您不能使用 Jsoup 来显示它们,因为它不支持 javascript。如果它们在不触发 javascript 的情况下可见,则可以使用 Jsoup 像平常一样解析它的内容。
  • 那么,如果模态窗口使用 javascript 显示,我应该使用什么来从模态窗口中提取数据。
  • 我不能说,因为我不知道。我所知道的是不可能使用 Jsoup 来实现它。您必须找到一个可以执行 javascript 的 Java 库。
  • 好的。谢谢你的帮助。非常感谢。

标签: javascript java html jsoup


【解决方案1】:

我假设模态是由 Javascript 生成的。 Jsoup 只是一个解析器。这意味着它将发出一个 HTTP 请求(GET 或 POST,无论你告诉它做什么),服务器(网站)将以初始 html 响应。通过说initial,我的意思是html 任何javascript 被执行之前。

Javascript 可以生成 html(就像有问题的模态一样),但这对 Jsoup 不可见,因为解析器只能读取,不能执行代码。浏览器能够生成模式,因为它包含一个 Javascript 执行引擎,可以解析 执行 Javascript。

当您访问网页时,您不知道什么是动态的(由 Javascript 生成),什么是静态的(由服务器按原样获取)。 检查什么是动态的和什么是静态的(静态对 Jsoup 可见)的一个小技巧是执行以下操作:

  1. 访问您要解析的网页(如果可能,请使用 chrome,我认为 mozilla 也可以)。
  2. 按 Ctrl + U。这将打开一个新选项卡。

新标签将包含一些 html、css 和 js 的网格。这是服务器获取到浏览器的内容,对 Jsoup 也是可见的。 如果模态框在那里,那么很好,Jsoup 可以看到它。如果没有,那么您必须使用充当无头浏览器的库。

无头浏览器本质上是没有图形界面的浏览器。它可以解析和执行Javascript。它“看到”了普通浏览器看到的内容。

最常用的库是selenium webdriver。请注意,selenium 是一个包含很多部分的测试框架。你需要的是webdriver。 那里有很多示例,其中包含现成的代码可以帮助您入门。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 2012-09-14
    • 2012-09-18
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    相关资源
    最近更新 更多