PHP curl 抓取 AJAX异步内容

jeremyadison 2010-06-10 12:04:42
如题 用PHP curl 如何抓取AJAX异步的内容
如何能在请求信息的同时不马上直接获取页面信息而是等待几秒钟等页面异步的内容呈现再抓取页面数据应该可以解决问题。
查了下curl_setopt好像没有延时之类的参数,都是请求了马上返回页面内容,如果用方法的怎么实现比较好?或者解决这问题的其他思路~~~
...全文
1967 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiantain00 2010-11-29
  • 打赏
  • 举报
回复
xuexue
若非零落 2010-09-27
  • 打赏
  • 举报
回复
追ajax吧。
战斗生活 2010-09-24
  • 打赏
  • 举报
回复
我正想要这个东西呢 可惜没有啊
jeremyadison 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sindel 的回复:]
curl是不能运行JS的,所以也就不能进行AJAX请求,你必须找到它ajax的链接地址,传值过去..

具体穿什么,简单的话,很容易在原始html代码里找到,复杂的话,需要你去分析它的JS了,然后模拟这个动作就可以了
[/Quote]


JS代码挺复杂,关键CURL能不能延时抓取页面呢~?如果有这样的设置或者参数能节约不少时间。
sindel 2010-06-10
  • 打赏
  • 举报
回复
curl是不能运行JS的,所以也就不能进行AJAX请求,你必须找到它ajax的链接地址,传值过去..

具体穿什么,简单的话,很容易在原始html代码里找到,复杂的话,需要你去分析它的JS了,然后模拟这个动作就可以了
jeremyadison 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xuzuning 的回复:]
你的思路是错误的,你只能抓取到页面的静态部分(包括Ajax请求代码)不可能抓取到页面中动态产生的内容
除非你再去抓取Ajax请求
[/Quote]

很好,等了你很久了。。。
AJAX返回信息后其实也是静态的部分,你可以用Firefox的firebug发现 动态改变的东西其实也存在于静态的页面上,只不过异步晚了5,6秒钟。如果你做一个测试<div id='result'></div>这个div为AJAX后呈现的信息容器,那么在AJAX之后你ALERT($("#result").html())是有内容的。
即便如你所说这是动态的东西,我怎么抓到AJAX的再次请求?有没有例子?还是要查找文件中JS的方法再请求??这比较麻烦啊。
Dleno 2010-06-10
  • 打赏
  • 举报
回复
没明白你说的意思
xuzuning 2010-06-10
  • 打赏
  • 举报
回复
你的思路是错误的,你只能抓取到页面的静态部分(包括Ajax请求代码)不可能抓取到页面中动态产生的内容
除非你再去抓取Ajax请求
lukylfm 2010-06-10
  • 打赏
  • 举报
回复
我也很想知道,帮顶了
jeremyadison 2010-06-10
  • 打赏
  • 举报
回复
终于分析出AJAX的JS脚本了,辛苦啊辛苦~~提交AJAX请求页面,抓取返回值,搞定~
看来这里也没啥好点子了,结贴~
sophiasfq 2010-06-10
  • 打赏
  • 举报
回复
如果用JavaScript处理就能直接得到responseText了呀。
还有,不能在PHP里延时调用curl吗?
疑惑中。。。
LuciferStar 2010-06-10
  • 打赏
  • 举报
回复
这类,我是直接模拟数据包抓页面的。
jeremyadison 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dingsongtao 的回复:]
curl是获取的服务器端编译后返回的代码。

而ajax是返回给客户浏览器后,在客户浏览器上执行的代码,客户浏览器上执行AJAX相当于是通过浏览器的组件,发起的新的请求,而与你当前用curl请求的地址,不是一个请求了。

你要想获得那些ajax的结果,那你就只有在curl获取结果后,象浏览器那样模拟请求,并改变内容。
好麻烦。。。。。。。。。。。


有个只能在windows平台用……
[/Quote]

不错,答到点子上了。。。您会有分的,你说的那个组件是啥?放不方便帮我找找?
继续等看有没有新的思路和想法。
Dleno 2010-06-10
  • 打赏
  • 举报
回复
curl只能得到当前请求地址返回给你的结果。
并不能象浏览器那样,得到结果了,还能执行个JS什么的。
或者说不能象浏览器那样解析得到的结果。
Dleno 2010-06-10
  • 打赏
  • 举报
回复
curl是获取的服务器端编译后返回的代码。

而ajax是返回给客户浏览器后,在客户浏览器上执行的代码,客户浏览器上执行AJAX相当于是通过浏览器的组件,发起的新的请求,而与你当前用curl请求的地址,不是一个请求了。

你要想获得那些ajax的结果,那你就只有在curl获取结果后,象浏览器那样模拟请求,并改变内容。
好麻烦。。。。。。。。。。。


有个只能在windows平台用的组件,名字搞忘了,很多人通过它来给某个网站的页面产生缩略图,貌似他获取到的图片就是包括ajax或JS执行后的最后的图片,不知道是不是可以通过那个组件也能实现你说的效果。


或者其他人也许有更好的办法。
jeremyadison 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dingsongtao 的回复:]
有点明白你的意思了。

你是说想用curl去抓取一个带有ajax获取信息的页面?
那个页面通过浏览器打开,可以看到页面加载后的所有内容,包括在页面上通过AJAX来获取并显示到页面的信息。

而curl却不能获取到那些通过ajax加载的东西,只能获取到相当于“查看源代码”的内容???



是这个意思吗???
[/Quote]

呵呵,恩呢~差不多啦。总之请求立即抓取页面是肯定获取不到AJAX后的异步内容滴,如果等待5秒左右就有了。。。
Dleno 2010-06-10
  • 打赏
  • 举报
回复
有点明白你的意思了。

你是说想用curl去抓取一个带有ajax获取信息的页面?
那个页面通过浏览器打开,可以看到页面加载后的所有内容,包括在页面上通过AJAX来获取并显示到页面的信息。

而curl却不能获取到那些通过ajax加载的东西,只能获取到相当于“查看源代码”的内容???



是这个意思吗???


20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧