Estrarre dati dagli indici di Google

Google Index

Ieri ero alle prese con un sito e le pagine indicizzate da Big G.

Sfortunatamente il big motore, tanto potente per molte cose, é piuttosto limitato per molte altre, come ad esempio il comando site.Per dirla tutta, non é il comando ad essere limitato, piuttosto la mancanza di esportare i risultati ottenuti dall’operatore in formato tabulare per successive elaborazioni.

A Google non piace che qualcuno metta le mani sui suoi indici a quanto pare (leggasi TOS), tanto é vero che pur dando un occhio alle API o delle librerie per Python (che in questo caso si sarebbero rivelate una manna dal cielo) la possibilità di esportazione sarebbe stata limitata a 64 risultati nel primo caso (precedentemente mille??) e ad ore di lettura per ottenere non so nemmeno io cosa nel secondo.

Insomma niente di allettante per un venerdì pomeriggio. Ecco allora che il lavorare di nuovo con Windows e con Excel 2007 si poteva dimostrare la chiave di volta. Ricordavo tempo addietro di aver letto qualche articolo dove Excel permetteva ora di aprire documenti dal web e fare il parsimg dei dati.

Speravo in qualcosa di flessibile come WebSundew che avevo usato in passato, il quale permette di definire delle aree di lettura sulla base di template, definire dove si trova il sistema di paginazione e simulare una navigazione utente al contempo facendo il grabbing del contenuto.

Purtroppo nulla di tutto ciò; Microsoft Excel fallisce miseramente, e anzi sono rimasto profondamente deluso (davvero?! forse me lo dovevo aspettare) dal vedere un misero import fatto con IE funziona, mentre di Firefox proprio non se ne parla.

No, avevo bisogno di qualcosa di differente che per fortuna qualcuno ha pensato di fare.

VB Script

Una funzione VBscript per Excel, che utilizzano un oggetto XmlHTTP per fare chiamate tramite le DOM API attraverso linguaggi di programmazione (tipo il VBScript) e delle chiamate a l’oggetto Regular expression, ha fatto il lavoro “sporco” in poche decine di secondi, alla mercé di una navigazione utente.

La pagina dove ho trovato lo script era priva di documentazione, ma la mia passata esperienza in Asp e VB6 mi dono stati d’aiuto. Quello che bisogna fare é semplicemente definire il nome a quattro celle tramite la casella per assegnare il nome ad un gruppo di celle, incollare lo script di seguito riportato e attendere che i dati compaiano a schermo.I nomi che dovrete assegnare sono i seguenti:

  • SEARCH_URL: che contiene l’URL con la query esatta in cui ricercare il testo
  • SEARCH_TERM: che contiene la stringa da ricercare nella pagina estratta
  • GOOGLE_PAGE: che contiene il numero di pagine di cui bisogna fare il parsing
  • FIRST_URL_HERE: che è la cella da dove inizieranno ad essere scritti i risultati

Consiglio di non abusare dello script, sebbene via sia una funzione di timer che permette di dilazionare le chiamate, intervallandole con una pausa che nello script che segue ho innalzato un pochino come tempistica, portandolo tra i 10 e i 15 secondi. L’implementazione non é difficile, ma la flessibilità lascia un pochino a desiderare se vi aspettate uno strumento “cotto e mangiato”.

**Update del 24/03/10: **Sfortunatamente testando meglio il codice sopra mi sono reso conto che funziona solo parzialmente. Sebbene si possano specificare il numero di pagine da analizzare, il codice è totalmente privo di un sistema per passare alla pagina successiva. Io ho lavorato e ottenuto una nuova versione del codice qui sopra, ma dato che l’ho fatto durante l’orario di lavoro non potrò divulgare il codice. Si tratta comunque di modifiche che un programmatore medio può riuscire a fare in una giornata di lavoro.