2016-04-24 79 views
-1

幾個星期前,我在此網站上發現,從谷歌的圖像效果(download images from google with command linebash腳本從谷歌的圖像

下載圖像一個非常有用的bash腳本雖然腳本是相當複雜的,我下載,我做了一些簡單的修改,以便不重命名結果以保留原始名稱。

但是,自上週以來,腳本停止工作......可能Google更新了代碼或其他內容,並且腳本的正則表達式不再解析結果。我對谷歌的代碼,網絡編程或重新編程知之甚少,儘管我做了一些有教育意義的猜測,但仍然沒有奏效。

我(unworking)調整了劇本這個

#! /bin/bash 

# function to create all dirs til file can be made 
function mkdirs { 
    file="$1" 
    dir="/" 

    # convert to full path 
    if [ "${file##/*}" ]; then 
     file="${PWD}/${file}" 
    fi 

    # dir name of following dir 
    next="${file#/}" 

    # while not filename 
    while [ "${next//[^\/]/}" ]; do 
     # create dir if doesn't exist 
     [ -d "${dir}" ] || mkdir "${dir}" 
     dir="${dir}/${next%%/*}" 
     next="${next#*/}" 
    done 

    # last directory to make 
    [ -d "${dir}" ] || mkdir "${dir}" 
} 

# get optional 'o' flag, this will open the image after download 
getopts 'o' option 
[[ $option = 'o' ]] && shift 

# parse arguments 
count=${1} 
shift 
query="[email protected]" 
[ -z "$query" ] && exit 1 # insufficient arguments 

# set user agent, customize this by visiting http://whatsmyuseragent.com/ 
useragent='Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:31.0) Gecko/20100101 Firefox/31.0' 

# construct google link 
link="www.google.cz/search?q=${query}\&tbm=isch" 

# fetch link for download 
imagelink=$(wget -e robots=off --user-agent "$useragent" -qO - "$link" | sed 's/</\n</g' | grep '<a href.*\(png\|jpg\|jpeg\)' | sed 's/.*imgurl=\([^&]*\)\&.*/\1/' | head -n $count | tail -n1) 
imagelink="${imagelink%\%*}" 

# get file extention (.png, .jpg, .jpeg) 
ext=$(echo $imagelink | sed "s/.*\(\.[^\.]*\)$/\1/") 

# set default save location and file name change this!! 
dir="$PWD" 
file="google image" 

# get optional second argument, which defines the file name or dir 
if [[ $# -eq 2 ]]; then 
    if [ -d "$2" ]; then 
     dir="$2" 
    else 
     file="${2}" 
     mkdirs "${dir}" 
     dir="" 
    fi 
fi 

# construct image link: add 'echo "${google_image}"' 
# after this line for debug output 
google_image="${dir}/${file}" 

# construct name, append number if file exists 
if [[ -e "${google_image}${ext}" ]] ; then 
    i=0 
    while [[ -e "${google_image}(${i})${ext}" ]] ; do 
     ((i++)) 
    done 
    google_image="${google_image}(${i})${ext}" 
else 
    google_image="${google_image}${ext}" 
fi 

# get actual picture and store in google_image.$ext 
wget --max-redirect 0 -q "${imagelink}" 

# if 'o' flag supplied: open image 
[[ $option = "o" ]] && gnome-open "${google_image}" 

# successful execution, exit code 0 
exit 0 
+0

我建議你到[ShellCheck](http://www.shellcheck.net/)它相應地更新你的問題,如果你仍然有困難。還要調試腳本並查看需要解析的內容。儘量避免使用RE和ERE來解析XML。改爲使用像xmlstarlet這樣的XML解析器。 –

回答

1

一個invetigate方式:提供-x選項來砸所以有腳本的痕跡;這是改變/斌/慶典在腳本 - 或者簡單地調用腳本/斌/ bash的-x與

bash -x <yourscript> 

您也可以標註你的腳本命令回聲跟蹤一些變量。