Estrarre le domande 'Le persone hanno chiesto anche' su Google

Come usare Python può aiutarci a capire cosa chiede la gente sui motori di ricerca

Posted by Alessio on 13-06-2019
In questo articolo

Ultimamente ho guardato su Netflix una serie che mi è piaciuta molto: “Mad Men”. La cosa che mi ha lasciato sconcertato fin dal primo episodio è stato il numero spropositato di sigarette fumate.

Ho cercato su Google e, oltre a darmi la risposta esatta (974 in 94 episodi di 7 stagioni), mi ha fatto venire un’idea.

Don Draper

PAA

“People also asked” è un box nella pagina dei risultati di ricerca introdotto nel 2015 , e permette di comprendere come il motore di ricerca aiuti l’utente nel raffinare la sua ricerca/mostrargli contenuti correlato all’argomento cercato.

Crescita PAA Source: MozCast

Per farla breve: per ogni clic sulla domanda, la scheda si espande e Google mostra la pagina che secondo lui ha dato la miglior risposta.

Nel frattempo carica anche altre domande correlate alla domanda che abbiamo appena cliccato.

E allora mi son chiesto: potrei ricavare informazioni interessanti dal modo in cui Google mi mostra le domande? Per cui ho creato un piccolo script in Python.

Potete scaricarlo liberamente su GitHub

⚠ DISCLAIMER:

Questo software non è autorizzato da Google e non segue il suo robots.txt . Fare scraping senza l’esplicito consenso di Google è una violazione dei termini e condizioni di servizio e può portare a conseguenze legali.

Questo software è inteso a fini prettamente educativi ed è fornito “così com’è”, per mostrare come può essere creato un crawler per ottenere ricorsivamente i risultati “People also asked”. Usalo a tuo rischio e pericolo.

Gquestions.py

Com’è fatto

Python

python logo

Python è un linguaggio di programmazione particolarmente versatile utilizzato in una quantità infinita di contesti (dall’analisi dati al machine learning allo sviluppo web). Data la sua relativa semplicità per chi non ha un forte background tecnico, è molto consigliato ai novizi.

Per far funzionare lo script avrete bisogno di scaricare una versione di Python >= 3.7 . I più nerd chiederanno perchè? Perchè da questa particolare versione finalmente i dizionari “ricordano” l’ordine di inserimento degli elementi, risultando particolarmente comodi quando si sta iterando.

Potete scaricare l’ultima versione qui: https://www.python.org/downloads/ .

Una volta scaricato avrete bisogno di Pip, il package manager di Python (già incluso nelle ultime versioni). Verificate se avete pip dando in un terminale:

pip --version

Se non vi restituisce nessun errore vuol dire che siam quasi pronti!

Dato che lo script ha bisogno di alcune dipendenze per poter funzionare, spostiamoci nella cartella dello script e scarichiamole subito:

cd <PATH_REPO_FOLDER>
pip install -r requirements.txt

La struttura delle cartelle:

.
├── csv
│   ├──<keyword1>_<date>.csv
│   └──<keyword2>_date.csv
├── html
│   ├── <keyword1>_<date>.html
│   └── <keyword2>_<date>.html
├── driver
│   └── yourchromedriver
├── templates
|  └── index.html
├── gquestions.py
└── requirements.txt

Selenium

selenium Selenium è una libreria per l’automazione del browser. Si interfaccia con un browser tramite un driver (ad esempio, lo script utilizza chromedriver) e permette di eseguire azioni sulle pagine.

Qui trovate le versioni, in base alla versione di Chrome installata sul vostro PC (lo vedete digitando chrome://settings/help nella barra degli URL).

http://chromedriver.chromium.org/downloads

Una volta scaricato l’archivio compresso, scompattatelo nella cartella driver dello script.

d3

d3 d3.js è una potente libreria JS per la visualizzazione dei dati. Per la visualizzazione di dati di questo tipo ho scelto di utilizzare un grafo ad albero, detto anche dendrogramma.

La versione base potete trovarla qui:

http://bl.ocks.org/d3noob/8375092

Come usarlo

asciicast

Lo script apre una nuova instanza del browser e cerca automaticamente una query, cliccando su ogni domanda e generando il relativo grafico in d3.

I risultati vengono salvati all’interno della cartella html/.

Spostatevi nella cartella che contiene il file gquestions.py e date il comando:

python gquestions.py query <keyword> (en|es) [depth <depth>] [--csv] [--headless]
  1. query: effettua una ricerca data una query. Se non vengono trovate domande il programma esce automaticamente. È un parametro obbligatorio.
  2. en o `es: cerca in inglese oppure in spagnolo. È un parametro obbligatorio.
  3. depth: Imposta la profondità. Default 0, max 1. Opzionale.
  4. --csv: Esporta le domande in un file .csv . Opzionale.
  5. --headless: Avvia Chrome in modalità headless. Opzionale.

One-level-depth

Ho deciso di limitare questa funzionalità solamente a 2 livelli perchè oltre il terzo livello diventa particolarmente complicato leggere il grafico.

Otterremo un grafico di questo tipo:

Two-level-depth

Idee d’uso dei dati

Questo domande correlate ci danno una panoramica molto più profonda rispetto alle tradizionali keyword. Di seguito una lista non esaustiva su cosa potete farci con questi dati.

Idee per nuovi contenuti

Conoscere cosa si chiedono gli utenti quando cercano un determinato argomento sul motore di ricerca ci aiuta molto quando stiamo pianificando un nuovo contenuto o addirittura un intero piano editoriale.

Può essere utilizzato anche per creare pagine FAQ.

Modificare contenuti esistenti

Utilizzare le domande che ci propone il motore di ricerca permette di migliorare contenuti che già abbiamo per renderli maggiormente contestualizzati.

Può essere un’idea utilizzare le domande come titoli dei sottoparagrafi o per migliorare title / description.

Question answering

Il Natural Language Processing (NLP) è una disciplina del Machine Learning che si occupa di “comprendere” i testi e le relazioni tra i concetti espressi nei contenuti testuali. In particolare, grazie al Deep Learning, è possibile creare dei modelli che possano rispondere a domande estraendo l’informazione dal testo.

Questions answering

Tra i dataset più famosi di questo tipo c’è sicuramente SQuAD, rilasciato dall’Università di Stanford che consiste in una serie di domande poste da crowdworker su alcuni articoli di Wikipedia, in cui la risposta ad ogni domanda è un segmento di testo preso dal corrispondente passaggio letto. In caso contrario, la domanda potrebbe venir considerata senza risposta.

In pratica è quello che fa Google con i contenuti degli altri quando mostra la risposta alle domande proposte nel “People also ask”.

Per approfondire questo argomento: https://towardsdatascience.com/nlp-building-a-question-answering-model-ed0529a68c54