一直用curl抓页面,十分方便,屡试屡爽,却在抓取花瓣网首页的一个看似简单的操作中,发现怎么也不能成功。
基本代码如下:
$ch = curl_init();
curl_setopt($ch,curlopt_url, 'http://huaban.com/');
//模拟蜘蛛
//curl_setopt($ch, curlopt_useragent, 'mozilla/5.0 (compatible; googlebot/2.1; +http://www.google.com/bot.html)');
//模拟普通浏览器
curl_setopt($ch, curlopt_useragent, 'mozilla/4.0 (compatible; msie 8.0; windows nt 5.1; trident/4.0; .net clr 2.0.50727)');
//可以不要cookie, 因为不登陆,能返回首页即可
//curl_setopt($ch, curlopt_useragent, '');
//其实也可以不要来路,模拟直接输入地址的
curl_setopt($ch, curlopt_referer, 'http://huaban.com/');
//curl_setopt($ch, curlopt_httpheader, $header);
//curl_setopt($ch, curlopt_header, 0); //输出header
curl_setopt($ch, curlopt_returntransfer, 0);
curl_exec($ch);
curl_close($ch);
我已经反复尝试不同的cookie header agent,都不能返回如同浏览器打开的那种可见页面,甚至尝试过 file_get_contents('http://huaban.com/'); 都没用。 返回的内容,绝大部分内容为js代码, 但之前成功抓取的页面,包括各种大小网站,也有js, 并不影响远程抓取和显示啊。 试了一天,百思不得其解,在csdn qq群里面也进行了讨论,有人说可能是curl不能运行js。 但现在哪个网站没有js代码能, 之前抓取的那些站,js也不在少数啊。没有一个失败的。。
实在不知道怎么解决,将这个问题丢出来,恳请高人作答。 到底是curl不行呢,还是这个网站太变态呢,还是方法不对呢?。。。。
回复讨论(解决方案) 这种优雅的小清新网站, 没js还让它怎么存活在这个竞争惨烈的市场?
这个网站的特别之处就是它的绝大部分内容都是js动态生成的,通过js与后端程序交互不断的产生新内容
所以用curl抓取的只是它最初始的代码,也就是大段的js了
这个网站的特别之处就是它的绝大部分内容都是js动态生成的,通过js与后端程序交互不断的产生新内容
所以用curl抓取的只是它最初始的代码,也就是大段的js了
js与后端程序交互不断的产生新内容
按说这个过程可以通过抓包程序捕获啊,ajax的内容都可以捕获,这个为什么不能呢?
通过抓包也没有发现什么访问,按理说,访问总的有个地址吧
这是你要的数据吧?不知道你是怎么个抓包法
{filter:pin:category:all,pins:[{pin_id:8447271,user_id:394332,board_id:1146189,file_id:3483249,file:{farm:farm1,bucket:hbimg,key:a1524741e8fae0916ba04c8d231f8ad23173ddb5baeff-rnfcpp,type:image/jpeg,width:440,height:5779,frames:1},media_type:0,source:weibo.com,link:http://weibo.com/2134919185/yovldsgws,raw_text:小小灯泡大改造,你也来动手做一个吧~,text_meta:{},via:2,via_user_id:0,original:null,created_at:1340276725,like_count:0,comment_count:0,repin_count:0,is_private:0,orig_source:http://ww4.sinaimg.cn/bmiddle/7f404811jw1du5vv6dpnij.jpg,user:{user_id:394332,username:havetogo,urlname:shouji132136652610,created_at:1338984624,avatar:{id:3061779,farm:farm1,bucket:hbimg,key:69d6d7842159946de9ca070c22da1714f259010afb4-wcvdor,type:image/jpeg,width:100,height:100,frames:1}},board:{board_id:1146189,user_id:394332,title:创新的力量,description:,category_id:null,seq:6,pin_count:1,follow_count:0,created_at:1340276719,updated_at:1340276725,is_private:0}},{pin_id:8447272,user_id:444560,board_id:1146190,file_id:2064511,file:{farm:farm1,bucket:hbimg,key:aa4fab086fe5887299cf17df48a250f9df25e375c95b-m4izbs,type:image/jpeg,width:440,height:566,frames:1},media_type:0,source:weibo.com,link:http://weibo.com/2596178104/yctqfusrg,raw_text:紫罗兰的致色原因:#翡翠知识普及#(61) 一般认为由于原生翡翠矿中含有微量的锰元素所致,由于锰元素的多寡和其他微量元素如铁等的渗入程度不同,其紫色也有浓淡深浅的剃度不同,如粉紫,茄紫,篮紫多种紫罗兰.十春九木,由于翡翠矿石含有锰是一种概率事件,所以紫色翡翠相对数量是很少的,再加上种水好则更少.,text_meta:{tags:
....
貌似我也遇到了同样的问题,你看看这个页面能不能模拟post提交数据地址是http://mixiaba.com/diy/iphoneok.asp?sid=null&pov=5
楼上,你是在向qq空间模拟提交数据吧,这个没有问题,不难实现。
但关键是我说的这个首页,别说提交数据,就是连最基本的页面都打不开,post数据的页面也一样,这就是在太奇怪了,好像这个网站所有页面都经过了特殊处理。
抓包是能抓到数据,4楼提供的那些数据,是可以抓到,但这些不可见啊。和浏览器打开的效果完全不一样啊。post数据的时候,直接返回,说这个页面不存在。
楼上,你是在向qq空间模拟提交数据吧,这个没有问题,不难实现。
但关键是我说的这个首页,别说提交数据,就是连最基本的页面都打不开,post数据的页面也一样,这就是在太奇怪了,好像这个网站所有页面都经过了特殊处理。
抓包是能抓到数据,4楼提供的那些数据,是可以抓到,但这些不可见啊。和浏览器打开的效果完全不一样啊。post数据的时候,直接返回,说这个页面不存在。
那些数据 是不是首页显示的数据内容,人家是将数据返回后再用js 来实现最后的效果.你以为抓下来就是什么html的最终代码?
我想问一下楼上,照你这么说,搜索引擎还无法抓到快照内容了,你在baidu,google,soso上site一下花瓣,看看有没有静态的可见的显示? 都有清楚的显示!!!!
按理说,本地浏览器可见,那么就应该有一种远程可见的方法。
在浏览器上做截图,并不存在技术上的问题
搞清楚,搜索引擎是截图,快照是截图,是图片?你site一下再说撒
我想知道,搜索引擎是怎么抓到内容的,既然搜索引擎能抓到,按说就应该有方法
我还没仔细的去看过花瓣的代码,不过如果我发的内容是首页的内容(应该就是,要不然要读那些做啥),那么基本上就应该是我说的样子.至于你说百度,谷歌之类的,有什么可比性吗?每年多少优秀的程序员去了?是不是他们去了也在用curl做爬虫呢?人家截图就一定是用curl抓首页代码...如果你要这么认为 我也真没啥好说的.
我想问一下楼上,照你这么说,搜索引擎还无法抓到快照内容了,你在baidu,google,soso上site一下花瓣,看看有没有静态的可见的显示? 都有清楚的显示!!!!
按理说,本地浏览器可见,那么就应该有一种远程可见的方法。
本来想进来耍个lm的....
现在正经回答一下12楼,
搜索引擎抓到的也是数据,html/js/css/json,
包括4楼给你的东西, 具体的页面是在浏览器端分析生成的,
至于你说google他们怎么生成快照....google有自己的浏览器,你觉得他们把抓到的html/js/css解析成页面会是什么难题吗?
一样的,如果需要,你也可以用抓到的js/html/css等生成页面,不过仅仅curl是不够的
凡事总有个解决的办法,大道理没用。
现在就剩下在线登录还没有搞定,提交不了数据
已搞定,谢谢大家
怎么搞定的?我也遇到你这个同样的问题,是啥回事啊