Kode python untuk mengunduh gambar beresolusi tinggi dari Google. saya telah memposting jawaban asli di sini Python - Unduh Gambar dari pencarian gambar google?
Saat ini mengunduh 100 gambar asli dengan kueri penelusuran
Kode
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
Percobaan pertama
Pertama, Anda perlu mengatur agen pengguna sehingga Google akan mengotorisasi keluaran dari pencarian. Kemudian kita bisa mencari gambar dan memilih yang diinginkan. Untuk mencapai itu kami menyisipkan baris baru yang hilang, wget akan mengembalikan pencarian google pada satu baris, dan memfilter tautannya. Indeks file disimpan dalam variabel 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
Gambar sekarang akan berada di direktori kerja Anda, Anda dapat men-tweak perintah terakhir dan menentukan nama file keluaran yang diinginkan.
Anda dapat meringkasnya dalam skrip shell:
#! /bin/bash
count=${1}
shift
query="[email protected]"
[ -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
Contoh penggunaan:
$ ls
Documents
Downloads
Music
script.sh
$ chmod +x script.sh
$ bash script.sh 5 awesome
$ ls
Documents
Downloads
google_image
Music
script.sh
Sekarang google_image
harus berisi gambar google kelima saat mencari 'mengagumkan'. Jika Anda mengalami bug, beri tahu saya, saya akan menanganinya.
Kode yang lebih baik
Masalah dengan kode ini adalah mengembalikan gambar dalam resolusi rendah. Solusi yang lebih baik adalah sebagai berikut:
#! /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="[email protected]"
[ -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
Komentar harus cukup jelas, jika Anda memiliki pertanyaan tentang kode (seperti pipa panjang) saya akan dengan senang hati mengklarifikasi mekanismenya. Perhatikan bahwa saya harus menyetel agen pengguna yang lebih detail di wget, mungkin Anda perlu menyetel agen pengguna yang berbeda tetapi menurut saya itu tidak akan menjadi masalah. Jika Anda mengalami masalah, kunjungi http://whatsmyuseragent.com/ dan berikan hasilnya di useragent
variabel.
Saat Anda ingin membuka gambar daripada hanya mengunduh, gunakan -o
bendera, contoh di bawah ini. Jika Anda ingin memperluas skrip dan juga menyertakan nama file keluaran khusus, beri tahu saya dan saya akan menambahkannya untuk Anda.
Contoh penggunaan:
$ chmod +x getimg.sh
$ ./getimg.sh 1 dog
$ gnome-open google_image.jpg
$ ./getimg.sh -o 10 donkey
Ini merupakan tambahan untuk jawaban yang diberikan oleh ShellFish. Sangat menghormati mereka untuk menyelesaikan ini. :)
Google baru-baru ini mengubah kode web mereka untuk halaman hasil gambar yang, sayangnya, telah merusak kode Shellfish. Saya menggunakannya setiap malam dalam tugas cron hingga sekitar 4 hari yang lalu ketika berhenti menerima hasil pencarian. Saat menyelidiki ini, saya menemukan bahwa Google telah menghapus elemen seperti imgurl dan telah beralih lebih banyak ke javascript.
Solusi saya adalah perluasan kode hebat Shellfish tetapi memiliki modifikasi untuk menangani perubahan Google ini dan menyertakan beberapa 'peningkatan' saya sendiri.
Itu melakukan satu pencarian Google, menyimpan hasilnya, mengunduh secara massal sejumlah gambar tertentu, lalu membangunnya menjadi satu gambar galeri menggunakan ImageMagick. Hingga 1.000 gambar dapat diminta.
Skrip bash ini tersedia di https://git.io/googliser
Terima kasih.