新聞中心
除了python可以爬蟲還有哪些編程語(yǔ)言可以爬蟲?
能夠做網(wǎng)絡(luò)爬蟲的編程語(yǔ)言很多,包括PHP、Java、C/C++、Python等都能做爬蟲,都能達(dá)到抓取想要的數(shù)據(jù)資源。針對(duì)不同的環(huán)境,我們需要了解他們做爬蟲的優(yōu)缺點(diǎn),才能選出合適的開(kāi)發(fā)環(huán)境。
為博愛(ài)等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及博愛(ài)網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站建設(shè)、網(wǎng)站制作、博愛(ài)網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
(一)PHP
網(wǎng)絡(luò)爬蟲需要快速的從服務(wù)器中抓取需要的數(shù)據(jù),有時(shí)數(shù)據(jù)量較大時(shí)需要進(jìn)行多線程抓取。PHP雖然是世界上最好的語(yǔ)言,但是PHP對(duì)多線程、異步支持不足,并發(fā)不足,而爬蟲程序?qū)λ俣群托室髽O高,所以說(shuō)PHP天生不是做爬蟲的。
(二)C/C++
C語(yǔ)言是一門面向過(guò)程、抽象化的通用程序設(shè)計(jì)語(yǔ)言,廣泛應(yīng)用于底層開(kāi)發(fā),運(yùn)行效率和性能是最強(qiáng)大的,但是它的學(xué)習(xí)成本非常高,需要有很好地編程知識(shí)基礎(chǔ),對(duì)于初學(xué)者或者編程知識(shí)不是很好地程序員來(lái)說(shuō),不是一個(gè)很好的選擇。當(dāng)然,能夠用C/C++編寫爬蟲程序,足以說(shuō)明能力很強(qiáng),但是絕不是最正確的選擇。
(三)Java
在網(wǎng)絡(luò)爬蟲方面,作為Python最大的對(duì)手Java,擁有強(qiáng)大的生態(tài)圈。但是Java本身很笨重,代碼量大。由于爬蟲與反爬蟲的較量是持久的,也是頻繁的,剛寫好的爬蟲程序很可能就不能用了。爬蟲程序需要經(jīng)常性的修改部分代碼。而Java的重構(gòu)成本比較高,任何修改都會(huì)導(dǎo)致大量代碼的變動(dòng)。
(四)Python
Python在設(shè)計(jì)上堅(jiān)持了清晰劃一的風(fēng)格,易讀、易維護(hù),語(yǔ)法優(yōu)美、代碼簡(jiǎn)潔、開(kāi)發(fā)效率高、第三方模塊多。并且擁有強(qiáng)大的爬蟲Scrapy,以及成熟高效的scrapy-redis分布式策略。實(shí)現(xiàn)同樣的爬蟲功能,代碼量少,而且維護(hù)方便,開(kāi)發(fā)效率高。
如何用PHP做網(wǎng)絡(luò)爬蟲
其實(shí)用PHP來(lái)爬會(huì)非常方便,主要是PHP的正則表達(dá)式功能在搜集頁(yè)面連接方面很方便,另外PHP的fopen、file_get_contents以及l(fā)ibcur的函數(shù)非常方便的下載網(wǎng)頁(yè)內(nèi)容。
具體處理方式就是建立就一個(gè)任務(wù)隊(duì)列,往隊(duì)列里面插入一些種子任務(wù)和可以開(kāi)始爬行,爬行的過(guò)程就是循環(huán)的從隊(duì)列里面提取一個(gè)URL,打開(kāi)后獲取連接插入隊(duì)列中,進(jìn)行相關(guān)的保存。隊(duì)列可以使用數(shù)組實(shí)現(xiàn)。
當(dāng)然PHP作為但線程的東西,慢慢爬還是可以,怕的就是有的URL打不開(kāi),會(huì)死在那里。
php中curl爬蟲 怎么樣通過(guò)網(wǎng)頁(yè)獲取所有鏈接
本文承接上面兩篇,本篇中的示例要調(diào)用到前兩篇中的函數(shù),做一個(gè)簡(jiǎn)單的URL采集。一般php采集網(wǎng)絡(luò)數(shù)據(jù)會(huì)用file_get_contents、file和cURL。不過(guò)據(jù)說(shuō)cURL會(huì)比f(wàn)ile_get_contents、file更快更專業(yè),更適合采集。今天就試試用cURL來(lái)獲取網(wǎng)頁(yè)上的所有鏈接。示例如下:
?php
/*
* 使用curl 采集hao123.com下的所有鏈接。
*/
include_once('function.php');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, '');
// 只需返回HTTP header
curl_setopt($ch, CURLOPT_HEADER, 1);
// 頁(yè)面內(nèi)容我們并不需要
// curl_setopt($ch, CURLOPT_NOBODY, 1);
// 返回結(jié)果,而不是輸出它
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($ch);
$info = curl_getinfo($ch);
if ($html === false) {
echo "cURL Error: " . curl_error($ch);
}
curl_close($ch);
$linkarr = _striplinks($html);
// 主機(jī)部分,補(bǔ)全用
$host = '';
if (is_array($linkarr)) {
foreach ($linkarr as $k = $v) {
$linkresult[$k] = _expandlinks($v, $host);
}
}
printf("p此頁(yè)面的所有鏈接為:/ppre%s/pren", var_export($linkresult , true));
?
function.php內(nèi)容如下(即為上兩篇中兩個(gè)函數(shù)的合集):
?php
function _striplinks($document) {
preg_match_all("'s*as.*?hrefs*=s*(["'])?(?(1) (.*?)\1 | ([^s]+))'isx", $document, $links);
// catenate the non-empty matches from the conditional subpattern
while (list($key, $val) = each($links[2])) {
if (!empty($val))
$match[] = $val;
} while (list($key, $val) = each($links[3])) {
if (!empty($val))
$match[] = $val;
}
// return the links
return $match;
}
/*===================================================================*
Function: _expandlinks
Purpose: expand each link into a fully qualified URL
Input: $links the links to qualify
$URI the full URI to get the base from
Output: $expandedLinks the expanded links
*===================================================================*/
function _expandlinks($links,$URI)
{
$URI_PARTS = parse_url($URI);
$host = $URI_PARTS["host"];
preg_match("/^[^?]+/",$URI,$match);
$match = preg_replace("|/[^/.]+.[^/.]+$|","",$match[0]);
$match = preg_replace("|/$|","",$match);
$match_part = parse_url($match);
$match_root =
$match_part["scheme"]."://".$match_part["host"];
$search = array( "|^http://".preg_quote($host)."|i",
"|^(/)|i",
"|^(?!http://)(?!mailto:)|i",
"|/./|",
"|/[^/]+/../|"
);
$replace = array( "",
$match_root."/",
$match."/",
"/",
"/"
);
$expandedLinks = preg_replace($search,$replace,$links);
return $expandedLinks;
}
?
爬蟲都可以干什么?
爬蟲可以做的是以下四種:
1、收集數(shù)據(jù):Python爬蟲程序可用于收集數(shù)據(jù),這是最直接和最常用的方法。由于爬蟲程序是一個(gè)程序,程序運(yùn)行得非???,不會(huì)因?yàn)橹貜?fù)的事情而感到疲倦,因此使用爬蟲程序獲取大量數(shù)據(jù)變得非常簡(jiǎn)單、快速。
2、數(shù)據(jù)儲(chǔ)存:Python爬蟲可以將從各個(gè)網(wǎng)站收集的數(shù)據(jù)存入原始頁(yè)面數(shù)據(jù)庫(kù)。其中的頁(yè)面數(shù)據(jù)與用戶瀏覽器得到的HTML是完全一樣的。注意:搜索引擎蜘蛛在抓取頁(yè)面時(shí),也做一定的重復(fù)內(nèi)容檢測(cè),一旦遇到訪問(wèn)權(quán)限很低的網(wǎng)站上有大量抄襲、采集或者復(fù)制的內(nèi)容,很可能就不再爬行。
3、網(wǎng)頁(yè)預(yù)處理:Python爬蟲可以將爬蟲抓取回來(lái)的頁(yè)面,進(jìn)行各種步驟的預(yù)處理。比如提取文字、中文分詞、消除噪音、索引處理、特殊文字處理等。
4、提供檢索服務(wù)、網(wǎng)站排名:Python爬蟲在對(duì)信息進(jìn)行組織和處理之后,為用戶提供關(guān)鍵字檢索服務(wù),將用戶檢索相關(guān)的信息展示給用戶。同時(shí)可以根據(jù)頁(yè)面的PageRank值來(lái)進(jìn)行網(wǎng)站排名,這樣Rank值高的網(wǎng)站在搜索結(jié)果中會(huì)排名較前,當(dāng)然也可以直接使用Money購(gòu)買搜索引擎網(wǎng)站排名。感興趣的話點(diǎn)擊此處,免費(fèi)學(xué)習(xí)一下
想了解更多有關(guān)爬蟲的相關(guān)信息,推薦咨詢達(dá)內(nèi)教育。達(dá)內(nèi)與阿里、Adobe、紅帽、ORACLE、微軟、美國(guó)計(jì)算機(jī)行業(yè)協(xié)會(huì)(CompTIA)、百度等國(guó)際知名廠商建立了項(xiàng)目合作關(guān)系。共同制定行業(yè)培訓(xùn)標(biāo)準(zhǔn),為達(dá)內(nèi)學(xué)員提供高端技術(shù)、所學(xué)課程受國(guó)際廠商認(rèn)可,讓達(dá)內(nèi)學(xué)員更具國(guó)際化就業(yè)競(jìng)爭(zhēng)力。
你好,我如何用php來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲呢?具體一點(diǎn)
以下是訪問(wèn)某音樂(lè)網(wǎng)站,并獲取其歌曲名等數(shù)組的示例,你可以參考:
?php
header('Content-type:text/html;charset=utf-8');
$doc = file_get_contents('');
$pa = '{MSL\((.*)\);}';
preg_match_all($pa,$doc,$r);
for($i=0;$icount($r[1]);$i++)
{
$r1 = explode(', ',$r[1][$i]);
echo '歌曲標(biāo)題:'. iconv('gb2312','utf-8',$r1[0]) .' 歌曲ID:'.$r1[1].'br/';
}
?
PHP爬蟲和基于命令行的Python爬蟲有什么差別
php和python 寫爬蟲采集一些簡(jiǎn)單的都可以,但是相對(duì)來(lái)說(shuō)python更好,更方便,有很多現(xiàn)成的庫(kù)和方法支持直接解析網(wǎng)站,剖析你需要的數(shù)據(jù),而php需要你大部分正則匹配,麻煩。
名稱欄目:爬蟲收集數(shù)據(jù)php 爬蟲收集數(shù)據(jù)
分享地址:http://www.dlmjj.cn/article/docoeio.html