télécharger des images depuis Google avec la ligne de commande

Je voudrais télécharger la n-ième image que google me donne avec la ligne de commande, comme avec la commande wget

Pour rechercher une image de [something] je vais juste à la page https://www.google.cz/search?q=[something]&tbm=isch mais comment puis-je obtenir l’URL du n-ième résultat de recherche pour pouvoir utiliser wget?

Premier essai

Vous devez d’abord définir l’agent utilisateur pour que Google autorise la sortie des recherches. Ensuite, nous pouvons rechercher des images et sélectionner celle souhaitée. Pour ce faire, nous insérons les nouvelles lignes manquantes, wget renvoie les recherches Google sur une seule ligne et filtre le lien. L’index du fichier est stocké dans le count variables.

 $ count=10 $ imagelink=$(wget --user-agent 'Mozilla/5.0' -qO - "www.google.be/search?q=something\&tbm=isch" | sed 's/ 

L'image sera maintenant dans votre répertoire de travail, vous pouvez modifier la dernière commande et spécifier le nom du fichier de sortie souhaité.

Vous pouvez le résumer dans un script 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/ 

Exemple d'utilisation:

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

Maintenant, google_image devrait contenir la cinquième image de Google lorsque vous recherchez "génial". Si vous rencontrez des bugs, faites le moi savoir, je vais m'en occuper.

Meilleur code

Le problème avec ce code est qu'il renvoie des images en basse résolution. Une meilleure solution est la suivante:

 #! /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/ 

Les commentaires doivent être explicites, si vous avez des questions sur le code (tel que le long pipeline), je serai heureux de clarifier la mécanique. Notez que je devais définir un agent utilisateur plus détaillé sur le wget, il peut arriver que vous deviez définir un agent utilisateur différent, mais je ne pense pas que ce soit un problème. Si vous rencontrez un problème, visitez http://whatsmyuseragent.com/ et fournissez la sortie dans la variable useragent .

Lorsque vous souhaitez ouvrir l'image au lieu de la télécharger uniquement, utilisez l'indicateur -o , exemple ci-dessous. Si vous souhaitez étendre le script et inclure également un nom de fichier de sortie personnalisé, faites le moi savoir et je l’appendai pour vous.

Exemple d'utilisation:

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

Ceci est un ajout à la réponse fournie par ShellFish . Beaucoup de respect à leur égard pour cela. 🙂

Google a récemment modifié son code Web pour la page de résultats de l’image, qui a malheureusement brisé le code de Shellfish. Je l’utilisais tous les soirs dans un job cron jusqu’à il y a environ 4 jours quand il a cessé de recevoir des résultats de recherche. Tout en étudiant cela, j’ai trouvé que Google a supprimé des éléments tels que imgurl et ont beaucoup plus changé en javascript.

Ma solution est une extension du code génial de Shellfish, mais elle comporte des modifications pour gérer ces modifications de Google et comprend quelques améliorations.

Il effectue une seule recherche sur Google, enregistre les résultats, télécharge en masse un nombre spécifié d’images, puis les construit en une seule image de la galerie à l’aide d’ImageMagick. Jusqu’à 1000 images peuvent être demandées.

Ce script bash est disponible sur https://github.com/teracow/googliser

Je vous remercie.

Code Python pour télécharger des images haute résolution de Google. J’ai eu la réponse originale ici Python – Télécharger des images de google Image search?

Télécharge actuellement 100 images originales en réponse à une requête de recherche

Code

 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 

comme pour la réponse de plateau

 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) 

travaillera avec l’actuelle recherche d’images Google juin 2016

Solution simple, pour les fichiers <4 Mo uniquement (sinon vous obtenez une erreur TLS):

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