如题 用PHP curl 如何抓取AJAX异步的内容
如何能在请求信息的同时不马上直接获取页面信息而是等待几秒钟等页面异步的内容呈现再抓取页面数据应该可以解决问题。
查了下curl_setopt好像没有延时之类的参数,都是请求了马上返回页面内容,如果用方法的怎么实现比较好?或者解决这问题的其他思路~~~

解决方案 »

  1.   

    你的思路是错误的,你只能抓取到页面的静态部分(包括Ajax请求代码)不可能抓取到页面中动态产生的内容
    除非你再去抓取Ajax请求
      

  2.   


    很好,等了你很久了
    AJAX返回信息后其实也是静态的部分,你可以用Firefox的firebug发现 动态改变的东西其实也存在于静态的页面上,只不过异步晚了5,6秒钟。如果你做一个测试<div id='result'></div>这个div为AJAX后呈现的信息容器,那么在AJAX之后你ALERT($("#result").html())是有内容的。
    即便如你所说这是动态的东西,我怎么抓到AJAX的再次请求?有没有例子?还是要查找文件中JS的方法再请求??这比较麻烦啊。
      

  3.   

    curl是不能运行JS的,所以也就不能进行AJAX请求,你必须找到它ajax的链接地址,传值过去..具体穿什么,简单的话,很容易在原始html代码里找到,复杂的话,需要你去分析它的JS了,然后模拟这个动作就可以了
      

  4.   

    JS代码挺复杂,关键CURL能不能延时抓取页面呢~?如果有这样的设置或者参数能节约不少时间。
      

  5.   

    有点明白你的意思了。你是说想用curl去抓取一个带有ajax获取信息的页面?
    那个页面通过浏览器打开,可以看到页面加载后的所有内容,包括在页面上通过AJAX来获取并显示到页面的信息。而curl却不能获取到那些通过ajax加载的东西,只能获取到相当于“查看源代码”的内容???是这个意思吗???
      

  6.   


    呵呵,恩呢~差不多啦。总之请求立即抓取页面是肯定获取不到AJAX后的异步内容滴,如果等待5秒左右就有了
      

  7.   

    curl是获取的服务器端编译后返回的代码。而ajax是返回给客户浏览器后,在客户浏览器上执行的代码,客户浏览器上执行AJAX相当于是通过浏览器的组件,发起的新的请求,而与你当前用curl请求的地址,不是一个请求了。你要想获得那些ajax的结果,那你就只有在curl获取结果后,象浏览器那样模拟请求,并改变内容。
    好麻烦。。
    有个只能在windows平台用的组件,名字搞忘了,很多人通过它来给某个网站的页面产生缩略图,貌似他获取到的图片就是包括ajax或JS执行后的最后的图片,不知道是不是可以通过那个组件也能实现你说的效果。
    或者其他人也许有更好的办法。
      

  8.   

    curl只能得到当前请求地址返回给你的结果。
    并不能象浏览器那样,得到结果了,还能执行个JS什么的。
    或者说不能象浏览器那样解析得到的结果。
      

  9.   

    如果用JavaScript处理就能直接得到responseText了呀。
    还有,不能在PHP里延时调用curl吗?
    疑惑中
      

  10.   

    终于分析出AJAX的JS脚本了,辛苦啊辛苦~~提交AJAX请求页面,抓取返回值,搞定~
    看来这里也没啥好点子了,结贴~