目標:利用PHP解決網站列表內容抓取php
描述:在羣裏看到小夥伴問到關於抓取網站列表內容,我就想起了當時工做關於文章採集的問題,可是後面想一想又不對,這是列表抓取,因而就想起了大神們常常說的說的「爬蟲」,我想必定能夠解決小夥伴的問題,由於是php小白,因此在網上找了不少爬蟲的寫法,可是太長了不想看,受網友帖子啓發看到了fopen()方法,那麼這個方法是幹嗎的?測試
fopen() 定義:"把指定文件或者url資源綁定到資源流上";註釋網站
額 好像不錯,在查找流的相關用法時,看到stream_get_contents()方法,那麼這個方法具體有什麼做用呢?url
stream_get_contents() 定義: "把資源流轉化成字符串";註釋spa
這下明白,利用他們就能夠解決頁面抓取了。.net
代碼:code
<?php define("URL", "http://www.zcy.gov.cn/search?shopId=6&pageNo="); $start_time = microtime(true); $array = Array(); echo '<ul class="view-mode-thumb">'; for($index = 1; $index <= 5; $index++){ $url = URL.$index; $fp = fopen($url, 'r'); $all_Str = stream_get_contents($fp, -1, -1); // $len = strlen($all_Str); $preg ='/<li class="product\s*\w*" style="\s*\w*\s*">.*?<\/li>/s'; $int = @preg_match_all($preg, $all_Str, $arr); $array = array_merge($array, $arr[0]); } foreach ($array as $key => $value) { # code... echo $value; } echo '</ul>'; $end_time = microtime(true); echo "<script>console.log('文件數目:".count($array)." 耗用時間:".($end_time-$start_time)."s')</script>"; // fpassthru($fp); fclose($fp); exit(); ?>
效果圖:blog
說明:不知道是本身能力問題仍是其餘緣由,PHP爬蟲的抓取頁面效率不是很高,測試500個連接10000個數據耗時接近10分鐘,最後本人仍是菜鳥,寫法上可能不是很完善,望見諒!ip