#!/bin/bash #ddmm 2018/07/18 #if [ -z $string ] 若是string 爲空 #-z STRING the length of STRING is zero read -p "請輸入要爬取的頁面數(直接回車,默認爲10):" page_num if [ -z $page_num ];then page_num=10 fi read -p "請輸入要保存的文件夾名稱(直接回車,默認爲img):" save_path_name if [ -z $save_path_name ];then save_path_name="img" fi for i in `seq 1 $page_num` do #循環N次,將須要下載的img的url保存到imgurl.txt echo "當前處理第$i個url" #curl https://www.dbmeinv.com/?pager_offset=${i} , curl抓取網頁內容 #grep -Eo '<img[^>]*src="[^"]*[^"]*"[^>]*>' #grep -E表示用擴展正則表達式 -O表示只輸出匹配到的部分 #正則解釋 linux 的正則不像js,php,java等,我的用的不是很習慣,因此寫的也很爛 #<img[^>]*src="[^"]*[^"]*"[^>]*> 匹配一個 img標籤; #[^>]表示匹配除了>之外的字符,*表示0個或多個,so,[^"]*也是同理 #grep -Eo 'src="[^"]*"' 將img標籤的src="xxx"部分提取了出來 #sed 's/src="//g' ,s表明替換指定字符,第一個/後面是被替換的字符src=",第二個/後面是替換爲的字符(這裏替換爲空),/g表明全局 #sed 's/"//g' ,與上面同理,將最後一個"去掉 #>> imgurl.txt 將內容拼接到imgurl.txt文件中 curl https://www.dbmeinv.com/?pager_offset=${i} | grep -Eo '<img[^>]*src="[^"]*[^"]*"[^>]*>' | grep -Eo 'src="[^"]*"' | sed 's/src="//g' | sed 's/"//g' >> imgurl.txt done #當前目錄下的img文件夾不存在,則新建文件夾 if [ ! -d "./$save_path_name" ]; then mkdir "./$save_path_name" fi #計數 file_count=0; #一行一行遍歷剛剛保存url的imgurl.txt文件 #sort imgurl.txt | uniq 表明去除重複行 for line in `sort imgurl.txt | uniq` do #%s 從1970年1月1日00:00:00到目前經歷的秒數 ,%N當前時間的納秒數據 , $(date +%s%N)即秒數 + 納秒,保證文件名惟一 #curl -o 表示把輸出寫到該文件中,即指定文件名並寫到文件 file_name=$(date +%s%N)".jpg" file_count=`expr $file_count + 1` echo "當前下載第$file_count個圖片" curl -o ./$save_path_name/$file_name $line done
原理就是:用curl先將圖片的img url保存到.txt中,而後再逐個下載,註釋寫的很詳細了,就不累贅講了php