如何在网站上获取javascript / ajax加载div的内容?

时间:2011-09-02 17:01:28

标签: php javascript ajax screen-scraping

我有一个PHP脚本,它使用CURL和simple_html_dom PHP库从另一个网站加载页面内容。这非常有效。如果我回复了返回的HTML,我可以在那里看到div-content。

但是,如果我尝试仅使用simple_html_dom选择该div,则div始终返回空。起初我不知道为什么。现在我知道这是因为它的内容显然填充了javascript / ajax。

我如何获取网站的内容,然后能够在javascript用正确的内容填充它之后选择div-content?

甚至可能吗? 谢谢!

5 个答案:

答案 0 :(得分:2)

如果您只对ajax返回的特定html感兴趣,那么这是小菜一碟。

  1. 从该ajax请求中收集网址,参数和请求类型(发布/获取)等信息。
  2. 从你的php / curl代码生成相同的请求,你就明白了。
  3. 并希望服务器逻辑不会检查是谁发送了请求。

答案 1 :(得分:1)

对于这种屏幕抓取,您可以尝试phpQuerySnoopy

phpQuery有web browser plugin并且scoopy声称要模拟一个

答案 2 :(得分:1)

当xhr将数据返回给浏览器并在那里执行操作时,您始终可以绑定到触发的事件。

 var xhReq = createXMLHttpRequest();
 xhReq.open("GET", "ur_php_url.php");
 xhReq.onreadystatechange = onResponse;
 xhReq.send(null);

 function onResponse()
 {
 // do the necessary
 }

答案 3 :(得分:1)

是的,这是可能的。

您需要做的是:

  1. 创建对该网页的CURL调用,以便检索加载您要查找的内容的Ajax调用中使用的任何参数。
  2. 使用您使用步骤1获得的参数,为该网页Javascript调用的文件创建另一个CURL调用。
  3. 离。假设您想要获取http://www.domain.com/page.html的内容,并且此page.html使用Ajax检索其他一些数据,例如$(“#div”)。load(“http://www.domain.com/ajax/data .PHP时间= 48484&安培; C = 487387" )

    您要做的是首先向page.html发出CURL请求,并使用preg_match()PHP函数或任何其他语言的任何等效函数获取Ajax调用的完整URL。之后,为该网址创建另一个CURL请求 - http://www.domain.com/ajax/data.php?time=48484&c=487387 - 并获取其内容。

    你们都准备好了!

答案 4 :(得分:0)

不幸的是,Javascript在浏览器中运行在客户端,所以除非在Web浏览器中加载页面,否则没有简单的方法。

我能想到的唯一方法是让浏览器在服务器的后台运行,重新加载并自动将生成的页面保存在一个文件中,该文件可供PHP脚本获取。 嗯......我不知道有谁实施了这样的想法。

最好尝试获取填充div的URL。例如,如果通过AJAX生成div内容,也许如果您使用cURL获取数据源URL,那么数据也可供您使用。