Descargar imágenes de búsqueda de imágenes de google (python)

Soy principiante web de raspado. En primer lugar, me refiero a https://www.youtube.com/watch?v=ZAUNEEtzsrg para descargar la imagen con la etiqueta específica (por ejemplo, cat ), ¡y funciona! Pero me encontré con un nuevo problema que solo puede descargar alrededor de 100 imágenes, y este problema parece ser “ajax”, que solo carga el html de la primera página y no carga todo. Por lo tanto, parece que debemos simular el desplazamiento hacia abajo para descargar las siguientes 100 imágenes o más.

Mi código: https://drive.google.com/file/d/0Bwjk-LKe_AohNk9CNXVQbGRxMHc/edit?usp=sharing

En resumen, los problemas son los siguientes:

  1. cómo descargar todas las imágenes en la búsqueda de imágenes de google por código fuente en python (por favor, dame algunos ejemplos :))

  2. ¿Debo conocer alguna técnica de raspado web?

Mi solución final es utilizar icrawler .

from icrawler.examples import GoogleImageCrawler google_crawler = GoogleImageCrawler('your_image_dir') google_crawler.crawl(keyword='sunny', offset=0, max_num=1000, date_min=None, date_max=None, feeder_thr_num=1, parser_thr_num=1, downloader_thr_num=4, min_size=(200,200), max_size=None) 

La ventaja es que el marco contiene 5 rastreadores integrados (google, bing, baidu, flicker y crawl en general), pero aún así solo proporciona 100 imágenes cuando se rastrea desde google.

Use la API de Google para obtener resultados, así que reemplace su URL por algo como esto:

https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=cat&rsz=8&start=0

Obtendrá 8 resultados, luego volverá a llamar al servicio con inicio = 7 para obtener los siguientes, etc. hasta que reciba un error.

Los datos devueltos están en formato JSON.

Aquí hay un ejemplo de Python que encontré en la web:

 import urllib2 import simplejson url = ('https://ajax.googleapis.com/ajax/services/search/images?' + 'v=1.0&q=barack%20obama&userip=INSERT-USER-IP') request = urllib2.Request(url, None, {'Referer': /* Enter the URL of your site here */}) response = urllib2.urlopen(request) # Process the JSON string. results = simplejson.load(response) # now have some fun with the results... 

En cuanto a las técnicas de desguace web hay esta página: http://jakeaustwick.me/python-web-scraping-resource

Espero eso ayude.

Para obtener 100 resultados, prueba esto:

 from urllib import FancyURLopener import re import posixpath import urlparse class MyOpener(FancyURLopener, object): version = "Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30" myopener = MyOpener() page = myopener.open('https://www.google.pt/search?q=love&biw=1600&bih=727&source=lnms&tbm=isch&sa=X&tbs=isz:l&tbm=isch') html = page.read() for match in re.finditer(r'
		      	

Para cualquier pregunta sobre icrawler , puede plantear un problema en Github, que puede obtener una respuesta más rápida.

El límite de números para los resultados de búsqueda de Google parece ser 1000. Una solución alternativa es definir un rango de fechas como el siguiente.

 from datetime import date from icrawler.builtin import GoogleImageCrawler google_crawler = GoogleImageCrawler( parser_threads=2, downloader_threads=4, storage={'root_dir': 'your_image_dir'}) google_crawler.crawl( keyword='sunny', max_num=1000, date_min=date(2014, 1, 1), date_max=date(2015, 1, 1)) google_crawler.crawl( keyword='sunny', max_num=1000, date_min=date(2015, 1, 1), date_max=date(2016, 1, 1))