linux – 从命令行下载图像

前端之家收集整理的这篇文章主要介绍了linux – 从命令行下载图像前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想下载第n个图像,谷歌给我的命令行,就像命令wget

搜索[某事]的图像,我只需转到页面https://www.google.cz/search?q=[something]\u0026amp;tbm=isch,但如何获取第n个搜索结果的网址,以便我可以使用wget的?

解决方法

第一次尝试

首先,您需要设置用户代理,所以Google将授权搜索输出.然后我们可以查找图像并选择所需的图像.为了完成这一点,我们插入缺少的换行符,wget将在一行中返回google搜索,并过滤链接.文件的索引存储在变量count中.

$count=10
$imagelink=$(wget --user-agent 'Mozilla/5.0' -qO - "www.google.be/search?q=something\&tbm=isch" | sed 's/</\n</g' | grep '<img' | head -n"$count" | tail -n1 | sed 's/.*src="\([^"]*\)".*/\1/')
$wget $imagelink

该图像现在将在您的工作目录中,您可以调整最后一个命令并指定所需的输出文件名.

您可以在shell脚本中对其进行总结:

#! /bin/bash
count=${1}
shift
query="$@"
[ -z $query ] && exit 1  # insufficient arguments
imagelink=$(wget --user-agent 'Mozilla/5.0' -qO - | "www.google.be/search?q=${query}\&tbm=isch" | sed 's/</\n</g' | grep '<img' | head -n"$count" | tail -n1 | sed 's/.*src="\([^"]*\)".*/\1/')
wget -qO google_image $imagelink

使用示例

$ls
Documents
Downloads
Music
script.sh
$chmod +x script.sh
$bash script.sh 5 awesome
$ls
Documents
Downloads
google_image
Music
script.sh

现在,google_image应该包含第五个谷歌图像,当寻找’awesome’.如果您遇到任何错误,请告诉我,我会照顾他们.

更好的代码

代码的问题是它以低分辨率返回图片.一个更好的解决方案如下:

#! /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="$@"
[ -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 -qO "${google_image}" "${imagelink}"

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

# successful execution,exit code 0
exit 0

评论应该是自我解释的,如果您对代码有任何疑问(如长管道),我将很乐意澄清机制.请注意,我必须在wget上设置一个更详细的用户代理,可能需要设置不同的用户代理,但我不认为这将是一个问题.如果您确实有问题,请访问http://whatsmyuseragent.com/并在useragent变量中提供输出.

当您希望打开图像而不是仅下载时,请使用-o标志,示例如下.如果你想扩展脚本,并且还包括一个自定义输出文件名,只需让我知道,我会为你添加.

使用示例

$chmod +x getimg.sh
$./getimg.sh 1 dog
$gnome-open google_image.jpg
$./getimg.sh -o 10 donkey

猜你在找的Linux相关文章