-
- function match_links($document) {
- preg_match_all("'
] ))[^>]*>?(.*?)'isx",$document,$links); - while (list($key,$val) = each($links[2])) {
- if(!empty($val))
- $match['link'][] = $val;
- }
- while(list($key,$val) = each($links[3])) {
- if(!empty($val))
- $match['link'][] = $val;
- }
- while(list($key,$val) = each($links[4])) {
- if(!empty($val))
- $match[ 'content'][] = $val;
- }
- while(list($key,$val) = each($links[0])) {
- if(!empty($val))
- $match['all'][] = $val;
- }
- return $match;
- }
複製代碼
主要是正規的問題,下面給個asp.net下的,多測試正規
取得頁面的連結正規
-
- public string GetHref(string HtmlCode)
- {
- string MatchVale = "";
- string Reg ="(h|H. )(r|R)(e|E)(f|F) *= *('|"")?((w|\|/|.|:|-|_) )('|""| * |>)?";
- foreach (Match m in Regex.Matches(HtmlCode, Reg))
- {
- MatchVale = (m.Value).ToLower().Replace("href=", " ").Trim() "||";
- }
- return MatchVale;
- }
複製程式碼
例2,php中透過正規表示式下載內容中的遠端圖片的函數代碼
用PHP正規表示式判斷內容中的圖片,下載並保存非本網域下的圖片的程式
這段程序其實是屬於「小偷程序」的重要部分。
這段程式只是下載遠端圖片的那一段。
-
- if (preg_match_all("/http://[^ "'] [.jpg|.gif|.jpeg|.png] /ui", stripcslashes($content),$aliurl)){
- $i=0; //多個檔案
- while(list($key ,$v) = each($aliurl[0])){
- //echo $v."
";
- $filetype = pathinfo($v, PATHINFO_EXTENSION); //取得後綴名
- $ff = @file_get_contents($v); //取得2進位檔案內容
- if(!stripos($v,"jbxue.com")){//判斷是否是自己網站下的圖片
- if (!empty($ff)){ //取得到檔案就執行下面的操作
- $dir = "upload/".date("Ymd")."/";//指定新的儲存路徑
- if (!file_exists($dir)){//判斷目錄是否存在
- @mkdir($dir,511,true); //建立多層目錄,511轉換成十進位是777具有可執行權限
- } // bbs.it-home.org
- $nfn = $dir.date("Ymdhis").$i.".".$filetype; //建立檔案的新名稱
- $nf = @fopen($nfn,"w"); //建立檔案
- fwrite($nf,$ff); //寫入檔案
- fclose($nf); //關閉檔案
- $i ; //多檔案
- echo "";
- $content = str_replace($v,$nfn, $content);//替換content中的參數
- }else{//取得不到圖片則替換為預設圖片
- $content = str_replace($v,"/upload/201204/20120417213810742.gif", $content);//替換content中的參數
- }
- }
- }
- }
}
複製程式碼
例3,PHP透過正規表示式下載圖片到本地。
-
-
/*
- shortage: 如果網頁中的圖片路徑不是絕對路徑,就無法抓取
- */
- set_time_limit(0);//抓取不受時間限制
$URL='http://pp.baidu.com/';//任何網址
get_pic($URL);
function get_pic($pic_url) {
- //取得圖片二進位流
- $data= CurlGet($pic_url);
- /*利用正規表示式得到圖片連結*/
- $pattern_src = '//';
- $num = preg_match_all($pattern_src, $data, $match_src);
- $arr_src= $match_src[1];//取得圖片陣列
- get_name($arr_src);
echo " finished!!!";
- return 0;
- }
/*得到圖片類型,並將其儲存到與該檔案相同目錄*/
- function get_name($pic_arr)
- {
- //圖片類型
- $pattern_type = '/(/.(jpg|bmp|jpeg|gif|png))/';
foreach($pic_arr as $pic_item){//循環取出每幅圖的位址
- $num = preg_match_all($pattern_type, $pic_item, $match_type);
- $pic_name = get_unique().$match_type[1][0];//改時微秒時間戳命名
- //以流的形式儲存圖片
- $write_fd = @fopen($pic_name,"wb");
- @fwrite($write_fd, CurlGet($pic_item));
- @fclose_fd, CurlGet($pic_item));
- @fclose($ write_fd);
- echo "[OK]..!";
- }
- return 0;
- }
//透過微秒時間取得唯一ID
- function get_unique(){
- list($msec, $sec) = explode(" ",microtime());
- return $sec.intval($msec*1000000);
- } p>
//抓取網頁內容
- function CurlGet($url){
- $url=str_replace('&','&',$url);
- $curl = curl_init();
- curl_setopt($curl, CURLOPT_URL, $url);
- curl_setopt($curl, CURLOPT_HEADER, false);
//curl, CURc ( $url);
- curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; SeaPort/1.2; Windows NT 5.1; SV1; InfoPath.2)");
- Curl_setopt( , 'cookie.txt');
- curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookie.txt');
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
- LLWURtop%)$7Sf. ;
- $values = curl_exec($curl);
- curl_close($curl);
- return $values;
- }
- ?>
複製程式碼
|