用PHP擷取網頁上的資訊相對於xpath效率低點

來源:互聯網
上載者:User

標籤:內容   copy   his   正則   無法   cti   沒有   連續   tran   

        用php實現對網頁的抓取,及資訊的收集,其實就是爬資料,具體實現步驟如下,首先應引入兩個檔案curl_html_get.php和save_file.php檔案,兩個檔案具體代碼是這樣的curl_html_get.php內代碼為

<?php
function curl_get_file_contents($url){ $c = curl_init(); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_URL, $url); $contents = curl_exec($c); curl_close($c);  if ($contents) return $contents; else return FALSE;}?>save_file.php檔案內容是<?php
/** * 連續建立目錄 * * @param string $dir 目錄字元串 * @param int $mode 許可權數字 * @return boolean */function make_dir($dir, $mode = "0777") { if (!$dir) return false;
if(!file_exists($dir)) { return mkdir($dir,$mode,true); } else { return true; }}
/** * 儲存檔案 * * @param string $fileName 檔案名稱(含相對路徑) * @param string $text 檔案內容 * @return boolean*/function save_file($filename, $text) { if (!$filename || !$text) return false;
$dirname = dirname($filename); if (make_dir($dirname)) {// file_put_contents($filename, $text, FILE_APPEND); file_put_contents($filename, $text);// if (is_resource($fp = fopen($filename, "w+"))) {// if (@fwrite($fp, $text)) {// fclose($fp);// return true;// } else {// fclose($fp);// return false;// }// } } return false;}

?>其實就是一個是擷取網頁內容的,另一個是建立檔案的。然後就是PHP代碼了,自己定義一個函數 函數內代碼基本是這樣的echo "==================start=======================<br />";// 1、擷取網頁$path = THIS_PATH . "download";$url = "http://10.maigoo.com/list_1187.html";$pathinfo = pathinfo($url);$html_pathname = $path . DS;$html_filename = $html_pathname . "list_1187.htm"; if (!file_exists($html_filename)) {$text = curl_get_file_contents($url);save_file($html_filename, $text);} else {$text = file_get_contents($html_filename);}
// 2、擷取地區 //start pos $start = ‘<div class="b-brand-nlist hoverdetail">‘; //end pos $end = ‘<div id="copyright">‘; $pos_start = strpos($text, $start); $pos_end = strpos($text, $end, $pos_start); $pos_end += strlen($end); $content = substr($text, $pos_start, $pos_end-$pos_start); save_file($html_pathname."list_1187.html", $content);  // 3、擷取所有的一級 $pattern = ‘@<div class="aclist">.*<div class="clear"></div>@Usi‘; if (!preg_match_all($pattern, $content, $matches)) { die("===============not match anything===================<"); } echo "=========================================<br />"; $index = 0; foreach ($matches[0] as $pinpai_cate) { save_file($html_pathname. $index . ".html", $pinpai_cate);  // 獲得一級分類 url 和 name get_level1_url_and_name($pinpai_cate, $cate1_url, $cate1_name);
// echo "==================$一個品牌=======================<br />"; $pattern = ‘@<li addbg="#400143".*</li>@Usi‘; if (preg_match_all($pattern, $content, $matches)) { foreach($matches[0] as $one_brand);  } } echo "==================end=======================<br />";} 基本原理就是先擷取下載網頁到本地,然後截取,最後用正則匹配。自己做得過程中沒有對代碼進行調優,導致代碼太長,重複的地方太多,若截取的地方用正則還是無法判斷,或者說地區有很多重複點,就需要再次截取接著排除幹擾,比較繁瑣,另外需要多寫函數,把所有代碼最佳化之後才能更深入提高自己水平。

用PHP擷取網頁上的資訊相對於xpath效率低點

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.