linux – 从命令行下载图像

linux – 从命令行下载图像,第1张

概述我想下载第n个图像,谷歌给我的命令行,就像命令wget 要搜索[某事]的图像,我只需转到页面https://www.google.cz/search?q=[something]\u0026amp;tbm=isch,但如何获取第n个搜索结果的网址,以便我可以使用wget的? 第一次尝试 首先,您需要设置用户代理,所以Google将授权搜索的输出.然后我们可以查找图像并选择所需的图像.为了完成这一点, 我想下载第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="\([^"]*\)".*//')$wget $imagelink

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

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

#! /bin/bashcount=shiftquery="$@"[ -z $query ] && exit 1  # insufficIEnt argumentsimagelink=$(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="\([^"]*\)".*//')wget -qO Google_image $imagelink

使用示例

$lsdocumentsDownloadsMusicscript.sh$chmod +x script.sh$bash script.sh 5 awesome$lsdocumentsDownloadsGoogle_imageMusicscript.sh

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

更好的代码

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

#! /bin/bash# function to create all dirs til file can be madefunction mkdirs {    file=""    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 downloadgetopts 'o' option[[ $option = 'o' ]] && shift# parse argumentscount=shiftquery="$@"[ -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 linklink="www.Google.cz/search?q=${query}\&tbm=isch"# fetch link for downloadimagelink=$(wget -e robots=off --user-agent "$useragent" -qO - "$link" | sed 's/</\n</g' | grep '<a href.*\(png\|jpg\|jpeg\)' | sed 's/.*imgurl=\([^&]*\)\&.*//' | head -n $count | tail -n1)imagelink="${imagelink%\%*}"# get file extention (.png,.jpg,.jpeg)ext=$(echo $imagelink | sed "s/.*\(\.[^\.]*\)$//")# set default save location and file name change this!!dir="$PWD"file="Google image"# get optional second argument,which defines the file name or dirif [[ $# -eq 2 ]]; then    if [ -d "" ]; then        dir=""    else        file=""        mkdirs "${dir}"        dir=""    fifi   # construct image link: add 'echo "${Google_image}"'# after this line for deBUG outputGoogle_image="${dir}/${file}"# construct name,append number if file existsif [[ -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.$extwget --max-redirect 0 -qO "${Google_image}" "${imagelink}"# if 'o' flag supplIEd: open image[[ $option = "o" ]] && gnome-open "${Google_image}"# successful execution,exit code 0exit 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 – 从命令行下载图像全部内容,希望文章能够帮你解决linux – 从命令行下载图像所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1048810.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存