2010-04-19 43 views
18

我想写一个可以解释JavaScript的网络爬虫程序。基本上它是一个Java或PHP程序,它将一个URL作为输入并输出与Firebug HTML窗口中的输出类似的DOM树。最好的例子是Kayak.com,当你'查看源代码'时,你不能看到浏览器上显示的结果DOM,但可以通过Firebug保存生成的HTML。可以解释JavaScript的网络爬虫程序

我该怎么做呢?有哪些工具可以帮助我?

+3

“捕捉”你想要的任何东西的可能性你可以使用Webkit。 – Seth 2010-04-19 19:12:40

+15

很酷。你的问题是什么? – 2010-04-19 19:13:08

+0

我正在寻找能够在我尝试抓取的页面上执行JavaScript代码的网页抓取工具。例如,某些页面具有JavaScript代码,以使用来自AJAX调用或JavaScript数组的数据填充页面。如果您在FireFox中打开这些页面并单击查看 - >“页面源代码”,则看不到您在浏览器窗口中看到的完整HTML DOM。但是如果你安装了firebug插件,你可以打开firebug,点击HTML标签,在调试窗口右键点击,然后点击“复制HTML”并粘贴到文本编辑器,你会看到由JavaScript代码生成的HTML DOM 。 – user320662 2010-04-19 20:51:19

回答

2

在Java中您比使用PHP更有可能取得成功。有一个预先存在的用于Java的Javascript解释器,称为Rhino。这是一个参考实现,并有详细记录。

Rhino被用于很多现有的Java应用程序中,以在应用程序内提供Javascript脚本功能。我也听说过它曾经协助在Javascript中执行自动化测试。

我也知道Java包括可以解析和呈现HTML的代码,尽管对Java比我更了解Java的人可能会提供更多的建议。我不否认要做到这样的事情是非常困难的;你基本上会重新实现浏览器的很多功能。

+0

hi thomasrutter,谢谢你的指针,但我猜rhino是一个JavaScript引擎,可能需要使用Rhino作为JavaScript引擎来构建一个原型浏览器来抓取JavaScript重页。如果我错了,请纠正我的错误 – user320662 2010-04-20 03:28:21

+0

Java还包含HTML解析/渲染功能。有人比我更了解Java,也许能够更好地提供建议 - 我的知识在此结束。 – thomasrutter 2010-04-20 04:11:18

5

我一直在使用HtmlUnit(Java)。这最初是为单元测试页面设计的。这不是完美的JavaScript,但它并没有让我在有限的使用中失败。据该网站,它可以运行下面的JS框架,以合理的程度:

  • 的jQuery 1.2.6
  • MochiKit 1.4.1
  • GWT 2.0.0
  • 萨里沙长枪0.9.9.3
  • MooTools的1.2.1
  • 原型1.6.0
  • 分机JS 2.2
  • 道场1.0.2
  • YUI 2.3.0
+0

你必须知道java使用它的PHP脚本? – 2014-10-21 22:55:34

+0

你必须使用java。尽管您可以尝试使用基于硒的PHP解决方案。 – Jeff 2014-10-25 20:48:45

6

Ruby的Capybara是一个集成测试库,但它也可以用来编写独立的基于web爬虫。由于它采用后端像硒或无头的WebKit,它解释的JavaScript外的开箱:

require 'capybara/dsl' 
require 'capybara-webkit' 

include Capybara::DSL 
Capybara.current_driver = :webkit 
Capybara.app_host = "http://www.google.com" 
page.visit("/") 
puts(page.html)