使用命令行从谷歌下载图像

我想下载谷歌给我的命令行的第n个图像,就像命令wget

search[something]形象,我只是去页面https://www.google.cz/search?q=[something]&tbm=isch但我怎么得到第nsearch结果的url,所以我可以使用wget?

Solutions Collecting From Web of "使用命令行从谷歌下载图像"

第一次尝试

首先,您需要设置用户代理,以便Google将授权搜索输出。 然后我们可以查找图像并选择所需的图像。 为了完成我们插入缺失的换行符,wget将在一行中返回谷歌搜索,并过滤链接。 文件的索引存储在变量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应该包含第五个谷歌图片时,寻找“真棒”。 如果您遇到任何错误,请告诉我,我会照顾他们。

更好的代码

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

 #! /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/并&#x5728;useragent变量中提供输出。

如果您希望打开图片而不是只下载图片,请使用下面的-o标志。 如果你想扩展脚本,还包括一个自定义的输出文件名,只需让我知道,我会为你添加它。

用法示例:

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

这是ShellFish提供的答案的补充 。 非常尊重他们的工作。 🙂

谷歌最近改变了他们的网页代码的图像结果页面,不幸的是,打破了贝类的代码。 我每天晚上都在使用它,直到4天前它停止接收搜索结果。 在对此进行调查的过程中,我发现Google已经删除了像imgurl这样的元素,并将其转移到了JavaScript中。

我的解决方案是贝壳的伟大代码的扩展,但有修改来处理这些谷歌的变化,并包括我自己的一些“增强”。

它执行单个Google搜索,保存结果,批量下载指定数量的图像,然后使用ImageMagick将这些图像构建到单个图库图像中。 最多可以请求1,000张图片。

这个bash脚本可以在https://github.com/teracow/googliser上找&#x5230;

谢谢。

Python代码从Google下载高分辨率图像。 我在这里提出原始答案Python – 从谷歌图片搜索下载图片?

目前下载100个原始图像给予一个搜索查询

 from bs4 import BeautifulSoup import requests import re import urllib2 import os import cookielib import json def get_soup(url,header): return BeautifulSoup(urllib2.urlopen(urllib2.Request(url,headers=header))) query = raw_input("query image")# you can change the query for the image here image_type="ActiOn" query= query.split() query='+'.join(query) url="https://www.google.co.in/search?q="+query+"&source=lnms&tbm=isch" print url #add the directory for your image here DIR="C:\\Users\\Rishabh\\Pictures\\"+query.split('+')[0]+"\\" header={'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36" } soup = get_soup(url,header) ActualImages=[]# contains the link for Large original images, type of image for a in soup.find_all("div",{"class":"rg_meta"}): link , Type =json.loads(a.text)["ou"] ,json.loads(a.text)["ity"] ActualImages.append((link,Type)) print "there are total" , len(ActualImages),"images" ###print images for i , (img , Type) in enumerate( ActualImages): try: req = urllib2.Request(img, headers={'User-Agent' : header}) raw_img = urllib2.urlopen(req).read() if not os.path.exists(DIR): os.mkdir(DIR) cntr = len([i for i in os.listdir(DIR) if image_type in i]) + 1 print cntr if len(Type)==0: f = open(DIR + image_type + "_"+ str(cntr)+".jpg", 'wb') else : f = open(DIR + image_type + "_"+ str(cntr)+"."+Type, 'wb') f.write(raw_img) f.close() except Exception as e: print "could not load : "+img print e 

至于shelf's的答案

 imagelink=$(wget -e robots=off --user-agent "$useragent" -qO - "$link" | sed 's/\"ou\"/\n\"ou\"/g' | grep '\"ou\"\:\".*\(png\|jpg\|jpeg\).*ow\"' | awk -F'"' '{print $4}' | head -n $count|tail -n1) 

将与当前的谷歌图片搜索2016年6月

简单的解决方案,仅用于文件<4 MB(否则您会收到TLS错误):

 wget --user-agent "Mozilla/5.0" -qO - "$@" |grep video.googleusercontent.com|cut -d'"' -f2|wget --content-disposition -c -i -