要搜索[某事]的图像,我只需转到页面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 – 从命令行下载图像所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)