php 實現簡單爬蟲
大部分是由他人部落格轉載而來, 只是根據目前自己的情況進行了部分修改.
<?php /** * 爬蟲程式 -- 原型 * * 從給定的url獲取html內容 * * @param string $url * @return string */ function _getUrlContent($url) { $handle = fopen($url, "r"); if ($handle) { $content = stream_get_contents($handle, 1024 * 1024); return $content; } else { return false; } } /** * 從html內容中篩選連結 * * @param string $web_content * @return array */ function _filterUrl($web_content) { $reg_tag_a = '/<[a|A].*?href=[\'\"]{0,1}([^>\'\"\ ]*).*?>/'; $result = preg_match_all($reg_tag_a, $web_content, $match_result); if ($result) { return $match_result[1]; } } function _filterimg($web_content){ $reg_tag_img = "/<img[^>]*src\=\"(([^>]*)(jpg|gif|png|bmp|jpeg))\"/i"; $result = preg_match_all($reg_tag_img, $web_content, $match_result); if($result){ return $match_result[1]; } } /** * 修正相對路徑 * * @param string $base_url * @param array $url_list * @return array */ function _reviseUrl($base_url, $url_list) { $url_info = parse_url($base_url); $base_url = $url_info["scheme"] . '://'; if ($url_info["user"] && $url_info["pass"]) { $base_url .= $url_info["user"] . ":" . $url_info["pass"] . "@"; } $base_url .= $url_info["host"]; if ($url_info["port"]) { $base_url .= ":" . $url_info["port"]; } $base_url .= $url_info["path"]; print_r($base_url); if (is_array($url_list)) { foreach ($url_list as $url_item) { if (preg_match('/^http/', $url_item)) { // 已經是完整的url $result[] = $url_item; } else { // 不完整的url $real_url = $base_url . '/' . $url_item; $result[] = $real_url; } } return $result; } else { return; } } /** * 爬蟲 * * @param string $url * @return array */ function crawler($url) { $content = _getUrlContent($url); if ($content) { $url_list = _reviseUrl($url, _filterUrl($content)); if ($url_list) { return $url_list; } else { return ; } } else { return ; } } function crawler_img($url){ $content = _getUrlContent($url); if ($content) { $img_list = _filterimg($content);; if ($img_list) { return $img_list; } else { return ; } } else { return ; } } /** * 測試用主程式 */ function main() { $current_url = "https://hao.360.cn/"; //初始url $fp_puts = fopen("url.txt", "ab"); //記錄url列表 $fp_gets = fopen("url.txt", "r"); //儲存url列表 $fp_puts_img = fopen("url-img.txt", "ab"); do { $content = _getUrlContent($current_url); $img_url = _filterimg($content); foreach($img_url as $url){ fputs($fp_puts_img, $url."\r\n"); //echo $url; //echo "<br >"; //GrabImage($url,$filename=""); } $result_url_arr = crawler($current_url); if ($result_url_arr) { foreach ($result_url_arr as $url) { fputs($fp_puts, $url."\r\n"); } } } while ($current_url = fgets($fp_gets, 1024)); //不斷獲得url //echo "ok"; } //以下是抓取網路圖片到本地 // $url 是遠端圖片的完整URL地址,不能為空。 // $filename 是可選變數: 如果為空,本地檔名將基於時間和日期 // 自動生成. function GrabImage($url,$filename="") { if($url==""):return false;endif; $path="download/"; //指定儲存資料夾 //若檔案不存在,則建立; if(!file_exists($path)){ mkdir($path); } if($filename=="") { $ext=strrchr($url,"."); if($ext!=".gif" && $ext!=".jpg" && $ext!=".bmp" && $ext!=".jpeg" && $ext!=".png"):return false;endif; $filename=$path.date("dMYHis").$ext; } ob_start(); readfile($url); $img = ob_get_contents(); ob_end_clean(); $size = strlen($img);
[email protected]($filename, "a"); fwrite($fp2,$img); fclose($fp2); return $filename; } function main_1(){ $current_url = "https://hao.360.cn/"; //初始url $content = _getUrlContent($current_url); $img_url = _filterimg($content); foreach($img_url as $url){ //echo $url; //echo "<br >"; GrabImage($url,$filename=""); } } //main_1(); main(); ?>
main() 是主程式, 該程式主要是通過 輸入一個起始地址, 比如 www.hao123.com 然後進行url 的搜尋 ,將頁面中所有url 儲存到 url.txt檔案中, 將所有頁面的圖片地址 儲存到url-img.txt 中
儲存到本地的方式被登出了, 即 取消 //GrabImage($url,$filename=""); 這個的登出 就是進行儲存 不過目前經常只能儲存30張左右, 還不知道是網路問題還是檔案命名的問題.
明天可以繼續嘗試.
-------------------------------------------------------------------
昨天準備今天繼續嘗試, 結果今天做客有事 忙了一天, 所以php 的爬蟲目前就完成到這, 我明天準備開始用python寫爬蟲.因為畢竟主流的爬蟲程式還是不太用php的..
相關推薦
使用php實現簡單爬蟲(一種通用的爬蟲思想)
概述 現在爬蟲技術算是一個普遍的技術了,各個語言的爬蟲百家爭鳴,但是根據筆者自己的感覺還是python是主流。爬蟲涉及到太多的東西,筆者並不是專業的爬蟲工程師,只不過個人興趣分享一下。由於筆者是php工作,所以就使用php來進行簡單爬蟲。不過我的方法應該是很通用的,我相信java,
php 實現簡單爬蟲
大部分是由他人部落格轉載而來, 只是根據目前自己的情況進行了部分修改. <?php /** * 爬蟲程式 -- 原型 * * 從給定的url獲取html內容 * * @param string $url * @return string */
PHP 實現簡單的樹形列表。
開發 記錄 動態 數據庫設計 在線 最近在為公司開發一個在線瀏覽PDF文檔的小web系統。在構建動態列表的時候犯了愁,很久沒寫代碼了,手有些生了,搞了半天才搞出來,寫篇博文記錄一下。首先是數據庫設計我設計的一個列數為三列的表Treenodes,這三列分別用來存儲當前節點的id、節點名稱、父
PHP 實現簡單的樹形列表 之二
服務器 數據庫 字符串 小項目 function 2017.5.22 北京 大雨來到公司之後, 準備把代碼移植到公司的小項目裏,移植的過程中發現了一處設計有問題的地方,調整一下。第一處錯誤是:構建葉子節點的時候,只保存了節點的名稱,沒有存ID, 如果頁面跟後臺交互的時候,當存在節點名稱一樣
PHP實現簡單的評論與回復功能還有刪除信息
技術分享 mit [0 ech ges get values width 錯誤 我們首先先看一下功能 上面黑色的是評論的下面紅色的字體是回復的 再來看看怎麽實現的 1.發布評論 <form action="pinglunchili.php" method="po
Jquery+PHP實現簡單的前後臺數據交互實現註冊登錄,添加留言功能
.html 獲取系統時間 沒有 username explode 註冊賬號 trap ++ 方法 頁面樣式應用了BootStrap框架。 首先看登錄頁(登錄頁用於賬號登錄,也可以跳轉到註冊賬號頁): <!DOCTYPE html> <html&g
python實現簡單爬蟲功能
我們 目錄 size .com all 本地文件 使用 url alt 在我們日常上網瀏覽網頁的時候,經常會看到一些好看的圖片,我們就希望把這些圖片保存下載,或者用戶用來做桌面壁紙,或者用來做設計的素材。 我們最常規的做法就是通過鼠標右鍵,選擇另存為。但有些圖片鼠標右
php實現簡單的驗證碼功能
mage isset pat ech ace ring bcd ont es2017 1.根據php中的GD庫對圖片進行處理,繪制出驗證碼的圖片,code.php中2.表單界面,簡單的session保存及與用戶輸入對比,確定是否驗證正確,form.php中<?php
Python學習 —— 實現簡單爬蟲
發現 guid openssl 取圖 lib 列表 了解 菜鳥 頁面數據 為了加快學習python3.x於是直接看了許多有實際操作的小項目,查了許多資料後寫了這個腳本,這個腳本主要是爬取百度圖片‘東方幻想鄉‘的圖片,但發現有幾個問題: 1.圖片會重復兩次。
PHP實現簡單的雙色球機選號碼
tex ima 實現簡單 組成 輸出 img 簡單的 push each <?php header(‘Content-Type: text/html; charset=utf-8‘); //PHP實現雙色球機選號碼 $red = range(1, 33);//
PHP實現簡單的socket與異步應用
ins pos 結構 data timeout 撥號 而是 recv tcp 1.socket應用 (1)簡單概念 網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket。 建立網絡通信連接至少要一對端口號(socket)。so
Python實現簡單爬蟲功能--批量下載百度貼吧裡的圖片
在上網瀏覽網頁的時候,經常會看到一些好看的圖片,我們就希望把這些圖片儲存下載,或者使用者用來做桌面桌布,或者用來做設計的素材。 我們最常規的做法就是通過滑鼠右鍵,選擇另存為。但有些圖片滑鼠右鍵的時候並沒有另存為選項,還有辦法就通過就是通過截圖工具擷取下來,但這樣就降低圖片的清晰度
初學PHP實現簡單的留言板 -> php+MySQL+Apache
效果圖: 1.在文字框輸入內容後,點擊發表留言,效果如下如所示. 2.資料庫中則將資料記錄了下來. 實現程式碼: gbook.php -> 資料視覺化介面 <
Node實現簡單爬蟲
1、新建一個專案 新建一個資料夾 安裝依賴 cnpm i --save PACKAGE_NAME 寫應用邏輯 2、核心邏輯 實現爬蟲需要用到三個依賴,分別是express、superagent、cheerio superagent是個http方面的庫,可以發
PHP實現簡單雙向連結串列
用PHP實現雙向連結串列,在實現上,與C++的區別,主要在指標與this的使用上的不同。在資料結構方面雙向連結串列要考慮兩個方向四個指向,每次增減節點時注意每個指向都要照顧到。 實現檔案DoubleLinkList.php <?php /** * **雙向連結串列 * @au
通過scrapy實現簡單爬蟲
Scrapy概述 網路爬蟲,大概很多人都聽說過吧。 它是通過一定的規則,自動抓取網際網路網站上的文章、資訊、圖片等等內容。 常見的應用就是搜尋引擎。 而Scrapy則是實現網路爬蟲的方式之一。 官方描述的Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用框架。 可
php實現簡單的搶紅包
/** * 簡單 搶紅包 示例 */ header("Content-Type: text/html;charset=utf-8");//輸出不亂碼,你懂的 $total=10;//紅包總額
爬蟲系統基礎框架 & 何時使用爬蟲框架?& requests庫 + bs4來實現簡單爬蟲
www ica try 藍色 scrapy 定時 調度器 find use 轉載請註明出處https://www.jianshu.com/p/88f920936edc,謝謝! 一、 爬蟲用途和本質: 網絡爬蟲顧名思義即模仿???在網絡上爬取數據,網絡爬蟲的本質是一段自動抓
使用tornado實現簡單爬蟲
程式碼在官方文件的示例程式碼中有,但是作為一個tornado新手來說閱讀起來還是有點困難的,於是我在程式碼中添加了註釋,方便理解,程式碼如下: # coding=utf-8 #!/usr/bin/env python import time from da
用JAVA實現簡單爬蟲多執行緒抓取
在迴圈爬取得基礎上進行多執行緒爬蟲,本程式中使用的三個執行緒,執行緒為實現runnable介面,並使用物件鎖防止併發共同去訪問同一個物件。讓三個執行緒同時爬去同一個url並且得到的新的url不重複。 import java.io.*; import j