1. 程式人生 > >shell爬取鬥圖網

shell爬取鬥圖網

#!/bin/bash

read -p "請輸入要爬取的頁面數(預設為10):" page_num
page_num=${page_num:-10}
echo $page_num
read -p "請輸入要儲存的目錄名稱(預設為img):" save_path_name
save_path_name=${save_page_name:-"/opt/img"}
[ ! -d $save_path_name ]&&mkdir $save_path_name
echo $save_path_name

for i in `seq 1 $page_num`
do

base_url="http://www.doutula.com/article/list/?page=${i}
" #迴圈N次,將需要下載的img的url儲存到imgurl.txt echo "當前處理第$i個url" curl $base_url | egrep -o '(<img)()*(.*)(data-original=")(.*)"(.*)(>)' | egrep -o '(data-original=")(.*)"' | sed -r 's/" data-backup=.*?//g;s/data-original="//g' >> $save_path_name/imgurl.txt done #計數 file_count=0; #一行一行遍歷剛剛儲存url的imgurl.txt檔案 #
sort imgurl.txt | uniq 代表去除重複行 for line in `sort $save_path_name/imgurl.txt | uniq` do #%s 從1970年1月1日00:00:00到目前經歷的秒數 ,%N當前時間的納秒資料 , $(date +%s%N)即秒數 + 納秒,保證檔名唯一 #curl -o 表示把輸出寫到該檔案中,即指定檔名並寫到檔案 type=${line##*.} file_name=$(date +%s%N)".$type" file_count=`expr $file_count + 1` echo "當前下載第$file_count個圖片
" curl -o $save_path_name/$file_name $line done [[email protected] shells]# vim doutu.sh [[email protected] shells]# cat doutu.sh #!/bin/bash read -p "請輸入要爬取的頁面數(預設為10):" page_num page_num=${page_num:-10} echo $page_num read -p "請輸入要儲存的目錄名稱(預設為img):" save_path_name save_path_name=${save_page_name:-"/opt/img"} [ ! -d $save_path_name ]&&mkdir $save_path_name echo $save_path_name for i in `seq 1 $page_num` do base_url="http://www.doutula.com/article/list/?page=${i}" #迴圈N次,將需要下載的img的url儲存到imgurl.txt echo "當前處理第$i個url" curl $base_url | egrep -o '(<img)()*(.*)(data-original=")(.*)"(.*)(>)' | egrep -o '(data-original=")(.*)"' | sed -r 's/" data-backup=.*?//g;s/data-original="//g' >> $save_path_name/imgurl.txt done #計數 file_count=0; #一行一行遍歷剛剛儲存url的imgurl.txt檔案 #sort imgurl.txt | uniq 代表去除重複行 for line in `sort $save_path_name/imgurl.txt | uniq` do #%s 從1970年1月1日00:00:00到目前經歷的秒數 ,%N當前時間的納秒資料 , $(date +%s%N)即秒數 + 納秒,保證檔名唯一 #curl -o 表示把輸出寫到該檔案中,即指定檔名並寫到檔案 type=${line##*.} file_name=$(date +%s%N)".$type" file_count=`expr $file_count + 1` echo "當前下載第$file_count個圖片" curl -o $save_path_name/$file_name $line done