Scrapper Google Suggest en 5 minutes chrono !

Je me suis souvent demandé comment il était possible de scrapper Google Suggest. Et je suis tombé par hasard sur la solution, qui est d’une facilité déconcertante ! Suivez le guide…

Comment fonctionne Google Suggest ?

Google Suggest est comme son nom l’indique, un outil de suggestion mis en place par Google en 2004 (il fera son arrivée en France seulement en 2008) à partir des requêtes tapées par l’internaute. Il prend aujourd’hui en compte le contexte, et bien évidemment la recherche personnalisée liée au compte Google utilisé sur votre navigateur.

Google Suggest par l'exemple

La recherche prédictive s’appuie donc sur le profil de l’internaute (son historique de recherches et ses affinités) et sur les requêtes d’autres internautes, en relation avec l’expression-clé tapée, plaçant en tête de liste les expressions les plus adéquates et les plus recherchées.

Sur quels critères Google classe ses suggestions ?

L’algorithme de Google utilise 4 critères pour classer ses prédictions, afin de répondre au mieux à la recherche effectuée par l’internaute, selon les informations dont il dispose le concernant. En effet, les suggestions affichées ne sont pas le fruit du hasard, car l’objectif est d’apporter le plus rapidement possible les réponses aux questions de l’utilisateur, avant même que celui-ci n’ait pu creuser son sujet (et force est de constater que généralement, ça fonctionne assez bien)

Voici ces 4 critères :

  1. La fréquence des requêtes : plus une expression en relation avec votre recherche est utilisée par les internautes, plus il y a de chances qu’elle vous soit proposée en haut de liste. C’est un choix assez logique, puisque statistiquement, il y a de fortes probabilités que vous utilisiez vous aussi ces expressions complémentaires.
  2. L’historique de vos recherches (nécessite un compte Google) : beaucoup plus personnalisé, ce critère dépend directement des thématiques que vous aurez abordé lors de vos recherches précédentes. Il va orienter les suggestions réalisées en conséquence. Si vous n’êtes pas connecté à votre compte Google, il n’est pas pris en considération.
  3. L’actualité : Google prend en compte les sujets qui intéressent les internautes ponctuellement, en masse et de manière importante. Par exemple, suite au décès d’une célébrité, il n’est pas rare que le « contenu » des suggestions Google Suggest relatif à cette dernière, soit momentanément modifié afin de répondre plus rapidement aux requêtes les plus souvent posées à son sujet.
  4. La position géographique : ce dernier critère, peut-être l’un des plus importants, permet à Google de proposer, quand la requête le permet, des résultats en relation avec la position géographique de l’internaute. C’est par ce biais que les résultats sont enrichis notamment les requêtes locales correspondantes, et c’est ce qui permet (notamment) de proposer en résultat les fiches Google MyBusiness géolocalisées (de l’intérêt, lorsque vous avez un business, de créer et renseigner efficacement votre fiche !)

Où trouver ces suggestions ?

Il est possible de lire les suggestions « par défaut » (hors connexion compte Google) et ce très, très facilement, comme vous allez le voir !

Ne me demandez pas comment j’ai trouvé ça, mais je vous donne la solution : Google utilise simplement une URL donnant en retour un contenu XML, contenant l’objet de la recherche. Cette URL, dont il suffit d’analyser le contenu en retour, est la suivante :

https://www.google.com/complete/search?output=toolbar&q=<votre-mot-clé>&hl=<code-langue>

Attention à traduire l’expression-clé en mode « web » (espaces remplacés par %20, il existe de nombreuses fonctions dans nos langages de programmation qui font ça très bien sans prise de tête), ce qui peut donner :

https://www.google.com/complete/search?output=toolbar&q=consultant%20seo&hl=fr

Voici la réponse en retour : un simple fichier XML !

<toplevel>
<CompleteSuggestion>
<suggestion data="consultant seo"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="consultant seo metz"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="consultant seo c'est quoi"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="consultant seo formation"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="consultant seo ne lisez pas ça"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="consultant seo definition"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="consultant seo bordeaux"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="consultant seo aix en provence"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="consultant seo rennes"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="consultant seo emploi"/>
</CompleteSuggestion>
</toplevel>

On peut facilement, en partant de là, imaginer l’usage que l’on peut en faire, car le XML est très facile à manipuler, et on comprend alors que tous les outils en ligne proposant du scrap de Google Suggest sont finalement très simples à créer !

Scrapper Google Suggest avec VB.Net

Voici un petit développement permettant, via un code en VB.Net (facilement convertible en C#) de capturer le contenu de Google Suggest, évidemment dans sa version « par défaut » hors contexte utilisateur.

Deux classes pour le scrapping Google Suggest

Tout d’abord, voici la classe que j’ai écrit permettant d’implémenter la fonction de scrapping que j’ai intelligemment appelée GetGoogleSuggest :

Imports System.Net.Http

Namespace Outils
    Namespace Scrapper
        Namespace Google
            Namespace Suggest

                Module basOutilsScrapperGoogleSuggest

#Region " Variables privées"

                    Private Const _suggestSearchUrl As String = "https://www.google.com/complete/search?output=toolbar&q={0}&hl={1}"

#End Region

#Region " Méthodes de scrapping Google Suggest"

                    ''' <summary>
                    ''' Fonction de scrapping Google Suggest
                    ''' </summary>
                    ''' <param name="sQuery">Requête recherchée</param>
                    ''' <param name="sLanguage">Code langage à utiliser ("fr" par défault)</param>
                    ''' <returns>Liste des éléments suggérés par Google Suggest</returns>
                    Public Async Function GetGoogleSuggest(ByVal sQuery As String, Optional sLanguage As String = "fr") As Task(Of List(Of cOutilsScrapperGoogleSuggestPhrase))

                        If String.IsNullOrWhiteSpace(sQuery) Then
                            Throw New ArgumentException("Argument cannot be null or empty!", "sQuery")
                        End If

                        Dim result As String = String.Empty

                        Using client As HttpClient = New HttpClient()
                            result = Await client.GetStringAsync(String.Format(_suggestSearchUrl, sQuery, sLanguage))
                        End Using

                        Dim doc As XDocument = XDocument.Parse(result)
                        Dim suggestions = From suggestion In doc.Descendants("CompleteSuggestion") Select New cOutilsScrapperGoogleSuggestPhrase With {
                                .Phrase = suggestion.Element("suggestion").Attribute("data").Value
                            }
                        Return suggestions.ToList()
                    End Function

#End Region

                End Module

            End Namespace
        End Namespace
    End Namespace
End Namespace

Et voici la classe définissant le format retourné par la fonction :

Namespace Outils
    Namespace Scrapper
        Namespace Google
            Namespace Suggest

                Public Class cOutilsScrapperGoogleSuggestPhrase
                    Public Property Phrase As String

                    Public Overrides Function ToString() As String
                        Return Me.Phrase
                    End Function

                End Class

            End Namespace
        End Namespace
    End Namespace
End Namespace

Utilisant la programmation asynchrone introduite dans le Dotnet Framework 4.5 avec Visual Studio 2012 pour améliorer la réactivité globale de mes développements, vous remarquez l’usage des méthodes Async et Await afin de fluidifier le rendu final.

Exemple d’utilisation

Voici un exemple d’appel à cette fonction :

Private Async Sub cmdTest_Click(sender As Object, e As EventArgs) Handles cmdTest.Click

        txtResult.Text = ""

        For Each oSuggest As Outils.Scrapper.Google.Suggest.cOutilsScrapperGoogleSuggestPhrase In Await Outils.Scrapper.Google.Suggest.GetGoogleSuggest(txtSearch.Text)
            txtResult.Text &= oSuggest.Phrase & vbCrLf
        Next

    End Sub

txtResult est un composant TextBox multilignes, txtSearch un TextBox où vous inscrivez votre requête. Le code ci-dessus correspond à l’événement Click d’un bouton nommé cmdTest.

Et voici le résultat :

Résultat du scrapping de Google Suggest

Le résultat est extrêmement rapide, et l’on peut très facilement imaginer nombre d’applications de ce petit outil. Il fera parti (dans une version beaucoup plus évoluée) des fonctionnalités d’un futur outil SEO, bientôt disponible ici même !

Voir tous les articles de la catégorie Programmation

4 réflexions sur “Scrapper Google Suggest en 5 minutes chrono !”

  1. Avatar de Philippe LAINE

    Merci Cédric pour ces éléments clairs et efficaces.
    Je me demande si Google bloquerait un certain comportement jugé anormal sur ce type de scrapping ?

    1. Avatar de Cédric GIRARD

      Comme tout scrapping au niveau du moteur de recherche, je pense qu’il faut tempérer ses ardeurs. Néanmoins, le volume de données retourné est faible, tant qu’on ne balance pas des millions de requêtes, je ne pense pas que cela pose de réel soucis.

  2. Avatar de Matthieu

    Merci beaucoup pour cet article.
    Non développeur VB, y’aurait une petite procédure pour utiliser vos sources avec Visual Studio ?

    1. Avatar de Cédric GIRARD

      Vous pouvez utiliser l’excellent Code Converter, de Telerik (permet de passer de VB.Net à C# en un clic) : https://converter.telerik.com/

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

sem, commodo suscipit vel, mattis venenatis neque. id, dictum Retour haut de page