使用PHP作網頁採集實例過程總結

最近有個任務是須要我檢查一些網站,若是純手工檢查的話,感受既費時又無聊。因此我就想用採集。思路其實很簡單,先把網站的源碼採集下來,而後用正則表達式去匹配符合的連接,最後把標題和網址入庫、分析。由於我使用最多的是php,因此打算用php作網頁採集。php

第一步,連接數據庫,取出須要檢查的網站和正則。html

數據庫這裏我用了postgresql,數據庫和表已經按要求建好。由於默認配置的環境是centos系統加nginx、mysql和php,因此首先是配置環境。配置具體不在這裏多說,下次總結。環境配置好後在php中用pg_connect鏈接數據庫,這裏我鏈接了兩個不一樣的數據庫。mysql

$conn_1=pg_connect("host=xxx.xxx.xxx.xxx port=5432 dbname=mydb1 user=postgres password=xxxxxx") ;nginx

$conn_2=pg_connect("host=xxx.xxx.xxx.xxx port=5432?dbname=mydb2?user=postgres password=xxxxxx") ;正則表達式

第二步,取出網頁源碼,對源碼進行初步處理。sql

不一樣網站編碼格式不同,須要先把編碼統一轉換成utf-8,否則以後入庫會出現亂碼。數據庫

//獲取網頁源碼centos

//$url='http://www.sijitao.net/' ;數組

$str = file_get_contents($url);函數

//使用preg_match和正則表達式取出編碼

$wcharset = preg_match("/<meta.+?charset=[^\w]?([-\w]+)/i",$str,$temp) ? strtolower($temp[1]):"" ;

//編碼轉換

if($wcharset){

$str=iconv("$wcharset", "UTF-8", $str) ;

}

這裏我還使用str_ireplace()函數對取到的源碼作了些字符替換,否則最後用正則匹配網址的時候會出現問題。

第三步,匹配處理後的源碼字符串,對匹配的數據入庫。

從數據庫中取出對應的正則,保存在$preg變量,符合正則的數據已數組形式保存在$m。

$pat = "/<a(.*?)href=\"($preg)\"(.*?)>(.*?)<\/a>/is";

preg_match_all($pat, $str, $m);

$cnt=count($m[2]) ;

for($i=0;$i<$cnt;$i++){

if(strip_tags($m[2][$i])){

$url=strip_tags($m[2][$i]) ;

$url=$m[2][$i] ;

}

if(strip_tags($m[4][$i])){

$title=strip_tags($m[4][$i]) ;

}

else{

$title="There's Something Errors!" ;

}

//編寫代碼,對title和url進行入庫操做。

}

}

採集單個網頁這樣基本上就算完成了。總結,這裏其實就用了preg_match(),preg_match_all()和str_ireplace()函數。程序菜鳥,寫的很差請見諒。

原文地址:http://www.sijitao.net/1511.html

相關文章
相關標籤/搜索