Ⅰ 如何用php 編寫網路爬蟲
php不太適合用來寫網路爬蟲,因為幾乎沒有現成的框架,或者成熟的下載機制,也不太適合做並發處理.
下載頁面的話除了一個curl,就是file_get_contents,或者curl_multi來做並發請求.curl可以代理埠,虛假ip,帶cookie,帶header請求目標頁面,下載完成之後解析頁面可以用queryList來解析html.寫法類似jQuery.
提供給你我之前寫的類:curl.php 希望可以幫到你.
QueryList.php和phpQuery.php由於文件太大了,沒辦法貼上來
<?php
classHttp{
publicfunctioncurlRequest($url,$postData='',$timeOut=10,$httpHeader=array()){
$handle=curl_init();
curl_setopt($handle,CURLOPT_URL,$url);
if($httpHeader){
curl_setopt($handle,CURLOPT_HTTPHEADER,$httpHeader);
}
curl_setopt($handle,CURLOPT_RETURNTRANSFER,true);
curl_setopt($handle,CURLOPT_HEADER,0);curl_setopt($handle,CURLOPT_TIMEOUT,$timeOut);
curl_setopt($handle,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($handle,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($handle,CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($handle,CURLOPT_USERAGENT,'Mozilla/5.0(Macintosh;IntelMacOSX10_7_2)AppleWebKit/537.36(KHTML,likeGecko)Chrome/27.0.1453.93Safari/537.36');curl_setopt($handle,CURLOPT_ENCODING,'gzip,deflate,sdch');
if(!empty($postData)){
curl_setopt($handle,CURLOPT_POST,1);
curl_setopt($handle,CURLOPT_POSTFIELDS,$postData);
}
$result['response']=curl_exec($handle);
$result['httpStatus']=curl_getinfo($handle,CURLINFO_HTTP_CODE);
$result['fullInfo']=curl_getinfo($handle);
$result['errorMsg']='';
$result['errorNo']=0;
if(curl_errno($handle)){
$result['errorMsg']=curl_error($handle);
$result['errorNo']=curl_errno($handle);
}
curl_close($handle);
return$result;
}
}
?>
Ⅱ 各種語言寫網路爬蟲有什麼優點缺點
我用 PHP 和 python 都寫過爬蟲和正文提取程序。
最開始使用 PHP 所以先說說 PHP 的優點:
1.語言比較簡單,PHP 是非常隨意的一種語言。寫起來容易讓你把精力放在你要做的事情上,而不是各種語法規則等等。
2.各種功能模塊齊全,這里分兩部分:
1.網頁下載:curl 等擴展庫;
2.文檔解析:dom、xpath、tidy、各種轉碼工具,可能跟題主的問題不太一樣,我的爬蟲需要提取正文,所以需要很復雜的文本處理,所以各種方便的文本處理工具是我的大愛。;
總之容易上手。
缺點:
1.並發處理能力較弱:由於當時 PHP 沒有線程、進程功能,要想實現並發需要借用多路服用模型,PHP 使用的是 select 模型。實現其來比較麻煩,可能是因為水平問題我的程序經常出現一些錯誤,導致漏抓。
再說說 Python:
優點:
1.各種爬蟲框架,方便高效的下載網頁;
2.多線程、進程模型成熟穩定,爬蟲是一個典型的多任務處理場景,請求頁面時會有較長的延遲,總體來說更多的是等待。多線程或進程會更優化程序效率,提升整個系統下載和分析能力。
3.GAE 的支持,當初寫爬蟲的時候剛剛有 GAE,而且只支持 Python ,利用 GAE 創建的爬蟲幾乎免費,最多的時候我有近千個應用實例在工作。
缺點:
1.對不規范 HTML 適應能力差:舉個例子,如果一個頁面裡面同時有 GB18030 字元集的中文和 UTF-8 字元集的中文,Python 處理起來就沒有 PHP 那麼簡單,你自己需要做很多的判斷工作。當然這是提取正文時的麻煩。
java 和 C++ 當時也考察過,相對腳本語言比較麻煩,所以放棄。
總之,如果開發一個小規模的爬蟲腳本語言是個各方面比較有優勢的語言。如果要開發一個復雜的爬蟲系統可能 Java 是個增加選項, C++ 我感覺寫個模塊之類的更加適合。對於一個爬蟲系統來說,下載和內文解析只是基本的兩個功能。真正好的系統還包括完善的任務調度、監控、存儲、頁面數據保存和更新邏輯、排重等等。爬蟲是一個耗費帶寬的應用,好的設計會節約大量的帶寬和伺服器資源,並且好壞差距很大。
Ⅲ 網頁內容是由javascript或者php用爬蟲有何不同
javascript是瀏覽器腳本,php是伺服器腳本。你可以查看js的代碼,但不能查看php的代碼。抓取網頁的時候php網頁的內容顯得更干凈,而js網頁還要過濾掉js代碼。
Ⅳ php 的爬蟲和 python 寫出來的有區別嗎
沒有本質區別,不同語言寫的相同功能的程序。
Ⅳ 如何用PHP做網路爬蟲
其實用PHP來爬會非常方便,主要是PHP的正則表達式功能在搜集頁面連接方面很方便,另外PHP的fopen、file_get_contents以及libcur的函數非常方便的下載網頁內容。
Ⅵ php爬蟲程序中怎麼樣偽造ip地址防止被封
1、國內ADSL是王道,多申請些線路,分布在多個不同的電信區局,能跨省跨市更好,自己寫好斷線重撥組件,自己寫動態IP追蹤服務,遠程硬體重置(主要針對ADSL貓,防止其宕機),其餘的任務分配,數據回收~
2、1.IP必須需要,,ADSL。如果有條件,其實可以跟機房多申請外網IP。
2.在有外網IP的機器上,部署代理伺服器。
3.你的程序,使用輪訓替換代理伺服器來訪問想要採集的網站。
3、ADSL + 腳本,監測是否被封,然後不斷切換 ip
設置查詢頻率限制
正統的做法是調用該網站提供的服務介面。
4、
1 user agent 偽裝和輪換
2 使用代理 ip 和輪換
3 cookies 的處理,有的網站對登陸用戶政策寬鬆些
友情提示:考慮爬蟲給人家網站帶來的負擔,be a responsible crawler
5、
盡可能的模擬用戶行為:
1、UserAgent經常換一換;
2、訪問時間間隔設長一點,訪問時間設置為隨機數;
3、訪問頁面的順序也可以隨機著來
6、
1. 對爬蟲抓取進行壓力控制;
2. 可以考慮使用代理的方式訪問目標站點。
-降低抓取頻率,時間設置長一些,訪問時間採用隨機數
-頻繁切換UserAgent(模擬瀏覽器訪問)
-多頁面數據,隨機訪問然後抓取數據
-更換用戶IP