1. 程式人生 > >php遠端抓取網站圖片並儲存

php遠端抓取網站圖片並儲存

    <?php  
      
    /** 
     * 一個用於抓取圖片的類 
     * 
     * @package default 
     * @author  WuJunwei 
     */  
    class download_image   
    {  
          
        public $save_path;                  //抓取圖片的儲存地址  
      
        //抓取圖片的大小限制(單位:位元組) 只抓比size比這個限制大的圖片  
        public $img_size=0;   
      
        //定義一個靜態陣列,用於記錄曾經抓取過的的超連結地址,避免重複抓取         
        public static $a_url_arr=array();     
          
        /** 
         * @param String $save_path    抓取圖片的儲存地址 
         * @param Int    $img_size     抓取圖片的儲存地址 
         */  
        public function __construct($save_path,$img_size)  
        {  
            $this->save_path=$save_path;  
            $this->img_size=$img_size;  
        }  
          
          
        /** 
         * 遞迴下載抓取首頁及其子頁面圖片的方法  ( recursive 遞迴) 
         * 
         * @param   String  $capture_url  用於抓取圖片的網址 
         *  
         */  
        public function recursive_download_images($capture_url)  
        {  
            if (!in_array($capture_url,self::$a_url_arr))   //沒抓取過  
            {                           
                self::$a_url_arr[]=$capture_url;   //計入靜態陣列  
            } else   //抓取過,直接退出函式  
            {  
                return;  
            }          
              
            $this->download_current_page_images($capture_url);  //下載當前頁面的所有圖片  
              
            //用@遮蔽掉因為抓取地址無法讀取導致的warning錯誤  
            
[email protected]
_get_contents($capture_url); //匹配a標籤href屬性中?之前部分的正則 $a_pattern = "|<a[^>]+href=['\" ]?([^ '\"?]+)['\" >]|U"; preg_match_all($a_pattern, $content, $a_out, PREG_SET_ORDER); $tmp_arr=array(); //定義一個數組,用於存放當前迴圈下抓取圖片的超連結地址 foreach ($a_out as $k => $v) { /** * 去除超連結中的 空'','#','/'和重複值 * 1: 超連結地址的值 不能等於當前抓取頁面的url, 否則會陷入死迴圈 * 2: 超連結為''或'#','/'也是本頁面,這樣也會陷入死迴圈, * 3: 有時一個超連線地址在一個網頁中會重複出現多次,如果不去除,會對一個子頁面進行重複下載) */ if ( $v[1] && !in_array($v[1],self::$a_url_arr) &&!in_array($v[1],array('#','/',$capture_url) ) ) { $tmp_arr[]=$v[1]; } } foreach ($tmp_arr as $k => $v) { //超連結路徑地址 if ( strpos($v, 'http://')!==false ) //如果url包含http://,可以直接訪問 { $a_url = $v; }else //否則證明是相對地址, 需要重新拼湊超連結的訪問地址 { $domain_url = substr($capture_url, 0,strpos($capture_url, '/',8)+1); $a_url=$domain_url.$v; } $this->recursive_download_images($a_url); } } /** * 下載當前網頁下的所有圖片 * * @param String $capture_url 用於抓取圖片的網頁地址 * @return Array 當前網頁上所有圖片img標籤url地址的一個數組 */ public function download_current_page_images($capture_url) {
[email protected]
_get_contents($capture_url); //遮蔽warning錯誤 //匹配img標籤src屬性中?之前部分的正則 $img_pattern = "|<img[^>]+src=['\" ]?([^ '\"?]+)['\" >]|U"; preg_match_all($img_pattern, $content, $img_out, PREG_SET_ORDER); $photo_num = count($img_out); //匹配到的圖片數量 echo '<h1>'.$capture_url . "共找到 " . $photo_num . " 張圖片</h1>"; foreach ($img_out as $k => $v) { $this->save_one_img($capture_url,$v[1]); } } /** * 儲存單個圖片的方法 * * @param String $capture_url 用於抓取圖片的網頁地址 * @param String $img_url 需要儲存的圖片的url * */ public function save_one_img($capture_url,$img_url) { //圖片路徑地址 if ( strpos($img_url, 'http://')!==false ) { // $img_url = $img_url; }else { $domain_url = substr($capture_url, 0,strpos($capture_url, '/',8)+1); $img_url=$domain_url.$img_url; } $pathinfo = pathinfo($img_url); //獲取圖片路徑資訊 $pic_name=$pathinfo['basename']; //獲取圖片的名字 if (file_exists($this->save_path.$pic_name)) //如果圖片存在,證明已經被抓取過,退出函式 { echo $img_url . '<span style="color:red;margin-left:80px">該圖片已經抓取過!</span><br/>'; return; } //將圖片內容讀入一個字串 $img_data = @file_get_contents($img_url); //遮蔽掉因為圖片地址無法讀取導致的warning錯誤 if ( strlen($img_data) > $this->img_size ) //下載size比限制大的圖片 { $img_size = file_put_contents($this->save_path . $pic_name, $img_data); if ($img_size) { echo $img_url . '<span style="color:green;margin-left:80px">圖片儲存成功!</span><br/>'; } else { echo $img_url . '<span style="color:red;margin-left:80px">圖片儲存失敗!</span><br/>'; } } else { echo $img_url . '<span style="color:red;margin-left:80px">圖片讀取失敗!</span><br/>'; } } } // END set_time_limit(120); //設定指令碼的最大執行時間 根據情況設定 $download_img=new download_image('E:/images/',0); //例項化下載圖片物件 $download_img->recursive_download_images('http://www.oschina.net/'); //遞迴抓取圖片方法 //$download_img->download_current_page_images($_POST['capture_url']); //只抓取當前頁面圖片方法 ?>

相關推薦

php遠端網站圖片儲存

<?php /** * 一個用於抓取圖片的類 * * @package default * @author WuJunwei */ class download

PHP cURL網上圖片

open content fopen 命令行工具 php curl AI s函數 for inf   cURL的底層是由一個命令行工具實現的,用於獲取遠程文件或傳輸文件,更多的情況是用來模擬get/post表單提交。也可以用戶文件上傳,爬取文件,支持FTP/FTPS,H

利用python_opencv和dlib實現從視訊中人臉照片儲存(親測有效)

系統:win10 編譯環境:pycharm python庫:cv2、dlib(自己安裝) 程式碼: import dlib import cv2 # 載入並初始化檢測器 detector = dlib.get_frontal_face_detector() camera = cv2.

使用python網站圖片,下載到本地

使用python抓取網站圖片,下載到本地 看程式碼 import os import random import urllib.request def imgs(url): try: rep = urllib.request.Request(url)

網路爬蟲之爬網頁圖片儲存

爬取網頁圖片並儲存在本地 將網頁上的圖片爬取之後,以圖片原有名字儲存在本地 程式碼: import requests import os url="http://p1.so.qhmsg.com/bdr/_240_/t01dab8b2e73fe661d6

JAVA網頁圖片下載到本地

package com.yong.util; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.URL; import jav

【新手】用pythonhtml程式碼儲存到txt檔案

import urllib r=urllib.urlopen(“http://www.w3school.com.cn/html5/index.asp“)//獲取html程式碼 f=f.open(“\Users\Desktop\123.txt”,”w”) f

Java爬蟲進階-phantomJS+selenium2網站圖片和小說

閒來無事,應小夥伴要求,最近寫了一個專門爬取小說和美女圖片的爬蟲工具類,有不足之處歡迎小夥伴們指出。準備工作:            新建maven工程,匯入pom依賴如下:<project xmlns="http://maven.apache.org/POM/4.0.

遠端頁面資訊解析XML

XmlTransfer.java  負責連結對方伺服器 package untitled1; import java.net.URL;import java.net.URLConnection;import java.net.HttpURLConnection;import

JAVA網頁的圖片,JAVA利用正則表示式網站圖片

利用java抓取網頁上的所有圖片: 用兩個正則表示式: 1、匹配html中img標籤的正則:<img.*src=(.*?)[^>]*?> 2、匹配img標籤中得src中http路徑的正則:http:\"?(.*?)(\"|>|\\s+) 實現:

Python爬蟲 BeautifulSoup網頁資料 儲存到資料庫MySQL

最近剛學習Python,做了個簡單的爬蟲,作為一個簡單的demo希望幫助和我一樣的初學者 程式碼使用python2.7做的爬蟲  抓取51job上面的職位名,公司名,薪資,釋出時間等等 直接上程式碼,程式碼中註釋還算比較清楚 ,沒有安裝mysql需要遮蔽掉相關程式碼:#!/u

php圖片鏈接下載到本地

mage inf 返回值 抓取 成功 png web目錄 本地 完成 備註: fclose這一步操作完成之後如果返回值是空表示下載成功,否則會返回1或者其他錯誤提示 這個步驟測試的時候實在yii2框架的基礎上執行的,下載到的圖片實在frontend目錄下的we

第十講:Python爬網頁圖片儲存到本地,包含次層頁面

上一講我們講到了從暱圖網的首頁下載圖片到本地,但是我們發現首頁上面的大部分連結其實都可以進入到二級頁面。 在二級頁面裡面,我們也

python爬網站上的圖片儲存到本地

  1.匯入需要的模組requests,BeautifulSoup,os(用於檔案讀寫)。   2.建立一個類,並初始化。 class BeautifulPicture: def __init__(self): # 類的初始化操作 self.headers = {

python3爬蟲 爬圖片,爬新聞網站文章儲存到資料庫

2017年9月16日零基礎入門Python,第二天就給自己找了一個任務,做網站文章的爬蟲小專案,因為實戰是學程式碼的最快方式。所以從今天起開始寫Python實戰入門系列教程,也建議大家學Python時一定要多寫多練。 目標 1,學習Python爬蟲 2

[Python][爬蟲03]requests+BeautifulSoup例項:圖片儲存

    上一篇中,安裝和初步使用了requests+BeautifulSoup,感受到了它們的便捷。但之前我們抓取的都是文字資訊,這次我們準備來抓取的是圖片資訊。 >第一個例項     首先,審查網頁元素:     因此其結構就為: <di

使用原生Ajax跨域遠端網頁原始碼其中圖片

最新修改:有人反饋說用不了的。估計是使用方式不對。按照下圖的步驟使用即可。 即 1.複製網頁路徑 -> 2.用IE開啟檔案(執行使用控制元件) -> 3.貼上路徑獲取原始碼 -> 4.獲取IMG下載地址 (剛使用的gif圖製作工具,分享一波:gif圖

ajax網站接口圖片瀑布流筆記

ajax抓取網站接口圖片瀑布流筆記用php結合ajax來實現去其它網站抓取圖片,在自己本地用!ajax代碼部分<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <t

使用PHP curl模擬瀏覽器網站信息

打開 user 開始 密碼認證 tran use 方式 網站 body curl是一個利用URL語法在命令行方式下工作的文件傳輸工具。curl是一個利用URL語法在命令行方式下工作的文件傳輸工具。它支持很多協議:FTP, FTPS, HTTP, HTTPS, GOPHER,

python學習(24) 使用Xpath解析美女圖片

Xpath最初用來處理XML解析,同樣適用於HTML文件處理。相比正則表示式更方便一些 Xpath基本規則 nodename 表示選取nodename 節點的所有子節點 / 表示當前節點的直接子節點 // 表示當前節點的子節點和孫子節點 . 表