【问题标题】:Jsoup with a plugin带有插件的 Jsoup
【发布时间】:2016-08-08 22:45:29
【问题描述】:

我正在使用 Jsoup 从不同的商店抓取一些在线数据,但我无法弄清楚如何以编程方式复制我作为用户所做的事情。要手动获取数据(登录后),用户必须从弹出的a tree 中选择一个商店。

据我所知,树并没有硬编码到站点中,而是在您的计算机与服务器交互时以交互方式构建的。当您在“查看页面源代码”中查找表格时,没有条目。当我inspect the tree 时,我确实看到了 HTML,它似乎来自“FancyTree”插件。

据我在 Developer Tools -- Network 上跟踪我的活动可以看出,下一步是一个不会更改 URL 的“GET”请求,所以我不确定我的商店选择是如何传输的.

任何关于如何让 Jsoup 或 Java 通常以编程方式与该表交互的建议都会非常有帮助,谢谢!

【问题讨论】:

  • DOMS 现在太动态了,希望只解析 html 并获得任何有用的东西。您需要使用像 Selenium 这样的远程控制浏览器的工具。这样,您可以要求它找到按钮和下拉菜单,选择正确的元素,正确执行 JS,然后在一切正确时向浏览器询问 DOMS 当前状态。然后你可以用jsoup解析它。如果这是使用 Linux 的服务器端应用程序,您仍然可以使用 xvfb 无头执行所有操作(如果是这种情况,则提供有用的提示)。
  • 谢谢你,如果我可以投票给 cmets,我会投票给它!

标签: java web-scraping jsoup


【解决方案1】:

Jsoup 只能解析原始源文件,不能解析 DOM。为了解析 DOM,您需要使用类似 HtmlUnit 的内容来呈现页面。然后就可以用Jsoup解析html内容了。

// load page using HTML Unit and fire scripts
WebClient webClient = new WebClient();
HtmlPage myPage = webClient.getPage(myURL);

// convert page to generated HTML and convert to document
doc = Jsoup.parse(myPage.asXml());

// do something with html content
System.out.println(doc.html());

// clean up resources        
webClient.close();

Parsing Javascript Generated Page with Jsoup

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 2015-02-12
    • 2015-03-14
    相关资源
    最近更新 更多