Curl号称强大,却在抓花瓣网的首页时,怎么也不能成功,求解!!!!!!!
一直用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是不够的
凡事总有个解决的办法,大道理没用。
现在就剩下在线登录还没有搞定,提交不了数据
已搞定,谢谢大家
怎么搞定的?我也遇到你这个同样的问题,是啥回事啊

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

PHP8.1中的枚舉功能通過定義命名常量增強了代碼的清晰度和類型安全性。 1)枚舉可以是整數、字符串或對象,提高了代碼可讀性和類型安全性。 2)枚舉基於類,支持面向對象特性,如遍歷和反射。 3)枚舉可用於比較和賦值,確保類型安全。 4)枚舉支持添加方法,實現複雜邏輯。 5)嚴格類型檢查和錯誤處理可避免常見錯誤。 6)枚舉減少魔法值,提升可維護性,但需注意性能優化。

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

使用PHP的cURL庫發送JSON數據在PHP開發中,經常需要與外部API進行交互,其中一種常見的方式是使用cURL庫發送POST�...
