跟大家講解下有關php采集程序,相信小伙伴們對這個話題應該也很關注吧,現在就為小伙伴們說說php采集程序,小編也收集到了有關php采集程序的相關資料,希望大家看到了會喜歡。
完成了大約10分鐘的采集后,出現fwrite(......)請求,出現警告,隨后出現丟包,有些網頁就出現抓取失敗的問題。。 前面10分鐘都沒問題,10分鐘之后,fwrite(....)發送請求出現警告的頻率慢慢變大 難道是被服務器拒絕了請求? 錯誤提示信息: Notice: fwrite(): in E:\CodeEdit\php\http\001.php on line 200 對鏈接http://www.mmkao.com/Beautyleg/201410/6565_6.html發起請求 即將采集下一組 對鏈接http://www.mmkao.com/Beautyleg/201410/6559.html發起請求 對鏈接http://www.mmkao.com/Beautyleg/201410/6559_2.html發起請求 對鏈接http://www.mmkao.com/Beautyleg/201410/6559_3.html發起請求 對鏈接http://www.mmkao.com/Beautyleg/201410/6559_4.html發起請求 對鏈接http://www.mmkao.com/Beautyleg/201410/6559_5.html發起請求 對鏈接http://www.mmkao.com/Beautyleg/201410/6559_6.html發起請求 對鏈接http://www.mmkao.com/Beautyleg/201410/6559_7.html發起請求 對鏈接http://www.mmkao.com/Beautyleg/201410/6559_8.html發起請求 對鏈接http://www.mmkao.com/Beautyleg/201410/6559_9.html發起請求 對鏈接http://www.mmkao.com/Beautyleg/201410/6559_10.html發起請求 即將采集下一組 對鏈接http://www.mmkao.com/Beautyleg/201410/6549.html發起請求 對鏈接http://www.mmkao.com/Beautyleg/201410/6549_2.html發起請求 Notice: fwrite(): in E:\CodeEdit\php\http\001.php on line 200 對鏈接http://www.mmkao.com/Beautyleg/201410/6549_3.html發起請求 即將采集下一組 Notice: fwrite(): in E:\CodeEdit\php\http\001.php on line 200 對鏈接http://www.mmkao.com/Beautyleg/201410/6537.html發起請求 Notice: fwrite(): in E:\CodeEdit\php\http\001.php on line 200 有點疑惑,代碼的實現原理還是很簡單的,只是網絡請求調試想對困難一些,有這方面經驗的,可以分享一下 代碼有點多?居然提示不能超過10000個字符。 代碼鏈接在這里: http://blog.csdn.net/free_program_1314/article/details/41798199 回復討論(解決方案)你在 100 行處 $this->conn = fsockopen($this->ip,$this->port,$errno,$errstr,$this->timeout); 后只在 101 行判斷了是否連接成功,雖然不成功時會返回 false 但在 62 行調用時 $this->connect(); 并沒有檢查是否返回了 false 即無論連接是否成功,程序都會繼續執行。于是很自然的把隱患擴散了出去 你至少得在 200 行的 fwrite($this->conn,.... 前,判斷一下 $this->conn 是否是資源 而若 $this->connect() 失敗,就該轉到策略處理程序,還按正常流程進行是沒有意義的
你在 100 行處 $this->conn = fsockopen($this->ip,$this->port,$errno,$errstr,$this->timeout); 后只在 101 行判斷了是否連接成功,雖然不成功時會返回 false 但在 62 行調用時 $this->connect(); 并沒有檢查是否返回了 false 即無論連接是否成功,程序都會繼續執行。于是很自然的把隱患擴散了出去 你至少得在 200 行的 fwrite($this->conn,.... 前,判斷一下 $this->conn 是否是資源 而若 $this->connect() 失敗,就該轉到策略處理程序,還按正常流程進行是沒有意義的
if($this->conn) { if($len != fwrite($this->conn, $this->cmd_line.$this->header.$this->post_content,$len)) { $this->status ="發送請求failed"; die($this->status); } } else { die($this->status); } //問題出在fwrite(....)發送請求失敗這里。。。 Notice: fwrite(): in E:\CodeEdit\php\http\001.php on line 213 發送請求failed你沒有判斷那個 $this->conn 是否有效
你沒有判斷那個 $this->conn 是否有效
稍加改進了一些,鏈接這些都沒問題,現在的錯誤提示是: 對鏈接http://www.mmkao.com/Beautyleg/201412/7066_9.html發起請求 沒有下一頁,原因是:匹配image分頁組失敗 但是getRollLink這個匹配下一頁的函數并沒有什么問題,我反復測試過,即便從本地保存的網頁里讀取也沒問題,而且在出現這個問題之前,也采集了很多網頁,也沒出現問題。 對鏈接http://www.mmkao.com/Beautyleg/201412/7066_5.html發起請求 對鏈接http://www.mmkao.com/Beautyleg/201412/7066_6.html發起請求 對鏈接http://www.mmkao.com/Beautyleg/201412/7066_7.html發起請求 對鏈接http://www.mmkao.com/Beautyleg/201412/7066_8.html發起請求 對鏈接http://www.mmkao.com/Beautyleg/201412/7066_9.html發起請求 沒有下一頁,原因是:匹配image分頁組失敗 改進后的發在這里了: http://blog.csdn.net/free_program_1314/article/details/41805697 舉例說明這個存在的問題,比如采集完第九個網頁之后,采集第十頁的時候出現匹配失敗,而這個采集第十頁的鏈接是第九頁的網頁信息提供的。 打開采集到的第九個文件,讀取并匹配下一頁的鏈接是沒有問題的。出現這樣的情況多次,每次我都嘗試從文件讀取并匹配下一頁的鏈接都是沒問題的。也就是說匹配下一頁的鏈接,如果有問題,剛開始采集就應該出現這個提示。。。現在的問題是,這個問題不定期出現
不定期出現是正常的,就算是用瀏覽器訪問,偶爾出現頁面打不開(刷新一下就好了)不也是正常的嗎? 你只要隨時檢查連接的有效性,并在失效時做出處理就可以了。比如等幾秒再次連接
不定期出現是正常的,就算是用瀏覽器訪問,偶爾出現頁面打不開(刷新一下就好了)不也是正常的嗎? 你只要隨時檢查連接的有效性,并在失效時做出處理就可以了。比如等幾秒再次連接
偶明白了不定期出現是正常的,就算是用瀏覽器訪問,偶爾出現頁面打不開(刷新一下就好了)不也是正常的嗎? 你只要隨時檢查連接的有效性,并在失效時做出處理就可以了。比如等幾秒再次連接
這個問題通過檢測到匹配失敗時,從保存的上一頁網頁中,提取下一頁鏈接,暫時解決了: 對鏈接http://www.mmkao.com/Beautyleg/201411/6906_13.html發起請求 沒有下一頁,原因是:匹配image分頁組失敗,嘗試從文件中讀取匹配模式 對鏈接http://www.mmkao.com/Beautyleg/201411/6906_14.html發起請求 即將采集下一組 對鏈接http://www.mmkao.com/Beautyleg/201411/6892.html發起請求 對鏈接http://www.mmkao.com/Beautyleg/201411/6892_2.html發起請求 對鏈接http://www.mmkao.com/Beautyleg/201411/6892_3.html發起請求 采集了10分鐘之后,還是出現請求失敗的問題,,,fwrite(),又是這個老問題,應該可以通過重置連接解決看起來很NB的樣子
來源:php中文網