1、使用curl實現站外採集
具體請參考我上一篇筆記:http://www.jb51.net/article/46432.htm
2、編碼轉換
首先通過查看原始碼找到採集的網站使用的編碼,通過mb_convert_encoding函數進行轉碼;
具體使用方法:
複製代碼 代碼如下:
//源字元是$str
//以下已知原編碼為GBK,轉換為utf-8
mb_convert_encoding($str, "UTF-8", "GBK");
//以下未知原編碼,通過auto自動檢測後,轉換編碼為utf-8
mb_convert_encoding($str, "UTF-8", "auto");
3、為更好地避開分行符號和空格等不定因素的阻礙,有必要先清除採集到的源碼中的分行符號、空格符和定位字元
複製代碼 代碼如下:
//方法一,使用str_replace進行替換
$contents = str_replace("\r\n", '', $contents); //清除分行符號
$contents = str_replace("\n", '', $contents); //清除分行符號
$contents = str_replace("\t", '', $contents); //清除定位字元
$contents = str_replace(" ", '', $contents); //清除空格符
//方法二,使用Regex進行替換
$contents = preg_replace("/([\r\n|\n|\t| ]+)/",'',$contents);
4、通過Regex匹配找出需要獲得的程式碼片段,使用preg_match_all實現該匹配
複製代碼 代碼如下:
函數解釋:
int preg_match_all ( string pattern, string subject, array matches [, int flags] )
pattern即正規運算式
subject即要進行尋找的原文
matches是用於儲存輸出結果的數組
flags是儲存的模式,包括:
PREG_PATTERN_ORDER; //整個數組是二維數組,$arr1[0]是包括邊界所構成匹配字串的數組,$arr1[1]除去邊界所構成的匹配字串的數組
PREG_SET_ORDER; //整個數組是二維數組,$arr2[0][0]是第一個包括邊界所構成的匹配的字串,$arr2[0][1]是第一個除去邊界所構成的匹配的字串,之後的數組以此類推
PREG_OFFSET_CAPTURE; //整個數組是三維數組,$arr3[0][0][0]是第一個包括邊界所構成的匹配的字串,$arr3[0][0][1]是到達第一個匹配字串的邊界的位移量(邊界不算在內),之後以此類推,$arr2[1][0][0]是第一個包括邊界所構成的匹配的字串,$arr3[1][0][1]是到達第一個匹配字串的邊界的位移量(邊界算在內);
//實際應用
preg_match_all('/(.*?)<\/p>/',$contents, $out, PREG_SET_ORDER);
$out將擷取到所有匹配的元素
$out[0][0]將是包括
在內的全段字元
$out[0][1]將是僅包括(.*?)括弧內所匹配到的字元段
//如此類推,第n個匹配到的欄位可以用以下方法取得
$out[n-1][1]
//若Regex中存大多個括弧,則取得句中第m個匹配點的方法是
$out[n-1][m]
5、取得要找到字元後,若要去掉html標籤,使用PHP內建的函數strip_tags即可方便地實現
複製代碼 代碼如下:
//例
$result=strip_tags($out[0][1]);
http://www.bkjia.com/PHPjc/728086.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/728086.htmlTechArticle1、使用curl實現站外採集 具體請參考我上一篇筆記:http://www.jb51.net/article/46432.htm 2、編碼轉換 首先通過查看原始碼找到採集的網站使用的編...