如何以强制更新的方式以编程方式捕获网页

时间:2008-12-27 15:25:16

标签: javascript c++ html

我需要捕获一个网站,并且正在寻找合适的库或程序来执行此操作。该网站使用Java Script并将更新推送到页面,我需要捕获这些以及页面本身。我使用curl捕获页面本身,但我不知道如何捕获更新。在给出选择的地方我会使用C ++。

此致

5 个答案:

答案 0 :(得分:2)

如果您仍想使用c ++和curl尝试弄清楚页面中的javascript是什么 - 我假设它只是使用计时器发送AJAX请求并更新页面(尽管它可能更复杂)。 使用firefox和firebug这样的工具(“Net”间谍就是你想要的)来看看它是什么样的请求 - 你会得到:

  • 请求的网址
  • 参数
  • 返回的内容(可能是html,text,xml或json)

运气好的话,你已经足够用curl模仿c ++中的行为了。如果您无法从收集的数据中做出任何事情,您将不得不浏览javascript并尝试弄清楚它在做什么(但大多数时候页面更新非常简单)。

这样做的简单方法是在浏览器中执行此操作,例如。作为一个firefox插件(用javascript编写) - 如果除了宠物项目之外的任何东西都需要它,这可能有点“不雅”,但它应该很容易做到:

  • 监视DOM树的更新(html DOM级别2有各种“突变”事件,但我从未使用它们,所以我不太了解它们或者它们是否“工作”/得到支持 - 请参阅{{ 3}})。甚至有可能这种东西在DOM mutation events中起作用,这意味着你不必制作一个完整的firefox插件 - 例如。 greasemonkey应该让你开始(你不想跟踪'加载',但是像“DOMSubtreeModified”这样的东西)。如果突变事件不起作用,您可以随时使用计时器并比较html内容。
  • 或者像firebug那样做并监视网络请求并对结果做一些事情

答案 1 :(得分:2)

安装Firefox和GreaseMonkey。让GM脚本在适当的位置添加DOM事件以跟踪修改。然后,您可以使用XMLHttpRequest将信息发送到服务器,或使用XPCOM file IO opearation将它们写入本地文件。

有了这个,你可以在十几行中做你想做的事情,很少甚至没有逆向工程,而其他人建议(屏幕抓取)将需要数千行代码用于JavaScript重型站点IMO。

附录:这是/不是/ C ++的工作。无论如何,如果你用C ++进行,你最终会对JS进行逆向工程,所以你也可以在第一时间学习足够的JS来使用GreaseMonkey。

答案 2 :(得分:1)

看看SpiderMonkey

我实际上并没有在愤怒中使用它,所以我不确定它是否会做你想要的。我遇到过它,可选地使用用Python编写的Scrapy网络爬行和屏幕抓取框架。

或者,您可以反向设计JavaScript推送更新的执行方式,并直接访问这些更新。听起来您需要存储这些更新和/或将它们应用到基本HTML页面。

答案 3 :(得分:1)

如果您正在寻找静态网页抓取BeautifulSoup(Python)是最好和最简单的之一。

如果你想要抓取一些javascript渲染的代码或其他东西,那么在页面渲染之前就无法完成,因此单独使用BeautifulSoup是不可能的。您将不得不使用像Crowbar - Similie这样的无头浏览器(使用XULRunner),它在无头浏览器上呈现javascript内容,并且此呈现内容的输出可以用作BeautifulSoup刮刀的输入。

答案 4 :(得分:0)

问题是您的网页正在更新,因为脚本代码正在页面上执行。使用curl不会让你那么做..

不确定您的确切需求..但您可以编写一个javascript注入器书签,为任何网页添加一个按钮,让您随时手动抓取DOM或body html ...这是多少个剪辑标记应用程序。

如果您需要能够在发生更新时自动捕捉更新内容 - 就像电影......那么您将需要更多参与的内容......