2017-08-09 8 views
2

j'ai écrit un grattoir d'image Google en Python en utilisant urllib2 et bibliothèque BeautifulSoup, qui envoie une requête de recherche en utilisant l'URL, y compris la requête et va chercher alors la liens vers les 10 premières images. Ce que je besoin est le lien direct de l'image, par exemple:résultat différent code html (UI) entre l'utilisation grattoir google image écrit en Python vs navigateur web

http://images.mentalfloss.com/sites/default/files/styles/insert_main_wide_image/public/einstein1_7.jpg

Quand je recherche pour la requête en utilisant mon navigateur (ce qui est Chrome) et afficher le code HTML de l'image page de résultats de recherche, la code inclut l'URL directe à l'image (comme ci-dessus), ainsi que l'URL de la page qui comprend l'image:

http://mentalfloss.com/article/49222/11-unserious-photos-albert-einstein

Cependant, le code HTML de la page de résultats de recherche que je me l'aide de mon grattoir python n'inclut pas l'URL directe de l'image, mais uniquement l'URL de l'original l page qui comprend l'image. Lorsque je sauvegarde le résultat HTML et affiche le fichier sur mon navigateur, il montre une ancienne interface de recherche d'images Google. Cliquer sur l'une des vignettes provoquerait un 'Votre fichier n'a pas été trouvé. Il se peut que l'erreur ait été déplacée ou supprimée.

Je suis conscient que les paramètres de recherche lors de l'utilisation de l'application du navigateur et l'envoi d'une requête d'URL en utilisant la bibliothèque de python sont différentes, mais je ne suis pas sûr que le paramètre est à l'origine de cette différence.

J'attaché images aux deux interfaces de résultats différents (ci-dessus est le résultat page HTML de mon grattoir python, fond est le résultat du navigateur Chrome)

image result page of the python scraper

image result page of the web browser (Chrome)

Et ici fait partie de mon script:

def search_image_google(name): 
    google_url = "https://www.google.com/search?btnG=Search&site=webhp&tbm=isch&source=hp&q={}" 
    headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'} 
    url = google_url.format(urllib2.quote(name+' face')) 

    try: 
     page = requests.get(url).text 
     soup = BeautifulSoup(page, 'html.parser') 
     result = soup.prettify("utf-8") 
     with open('output.html', 'wb') as file: 
      file.write(result) 

     cnt = 0 
     for link in soup.find_all('table', class_ = 'images_table'): 
      for child in link.contents: 
       for row in child: 
        if cnt > 9: 
         break; 
        else: 
         img_link = str(row.a['href'])[7:] 
         cnt += 1 
         print(img_link) 

    except Exception as e: 
     print('Exception: %s' % str(e)) 

Aidez-nous!

Répondre

1

Essayez d'examiner tous les en-têtes HTTP de votre navigateur envoie, vous pouvez avoir besoin de plus que l'agent utilisateur.

Rappelez-vous aussi au respect /robots.txt de site!

+0

Votre solution simple l'a fait. J'ai examiné les en-têtes que mon Chrome envoie, et ajouté plus de paramètres autres que l'user-agent, et il semble me donner l'URL de l'image originale dont j'ai besoin. Merci beaucoup. – user3052069

1

Désolé de dire, mais vous allez avoir du mal avec cette approche.

Google vous servira un code HTML différent, en fonction d'un certain nombre de facteurs (agent d'utilisateur, capacités du navigateur, si vous êtes connecté, peut-être même la vitesse de connexion ...).

Vous pouvez même vous connecter à différents serveurs Google qui exécutent des versions légèrement différentes de leur code, et donc un code HTML légèrement différent vous sera envoyé. De plus, Google modifie de temps en temps son balisage dans le cadre du développement normal ...

Ainsi, ce sont tous les faits naturels qui entravent votre capacité à ramper leurs résultats.

Ajoutez à cela: ceci est contre le T & de Google, donc ils emploieront également des contre-mesures rampantes une fois qu'elles vous détectent (captchas etc.) le rendant encore plus difficile à faire.

En effet, Google souhaitez-vous utiliser Google Custom Search.

https://developers.google.com/custom-search/

Il a un aspect Recherche d'images à elle. Vous devriez enquêter sur cela, j'espère que cela va résoudre vos problèmes.