Risultati da 1 a 14 di 14

Discussione: Macro che restituisce MetaTitle e URL del primo risultato Google



  1. #1
    L'avatar di Francesco2
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Londra
    Messaggi
    10
    Versione Office
    Excel 2010
    Likes ricevuti
    1

    Macro che restituisce MetaTitle e URL del primo risultato Google

    Ciao ragazzi,

    come da titolo, avrei bisogno di una macro che cerchi su google le parole chiave in colonna e restituisca per ognuna di esse il meta title e l'URL del primo, del secondo e del terzo risultato di ricerca.
    Navigando in rete ho trovato una macro che fa esattamente questo ma:

    1) Restituisce meta title e URL solo del primo risultato di ricerca
    2) Non funziona con parole chiave che attivano annunci a pagamento (Per intenderci ho inserito una immagine a fine post). In questi casi, ottengo sempre un risultato ma non e' il primo dei risultati organici e spesso il risultato che ottengo non e' neanche presente sulla prima pagina dei risultati.

    Questa e' la macro che ho trovato:



    Codice: 
    Sub XMLHTTP()
    
    
        On Error Resume Next
        Dim url As String, lastRow As Long
        Dim XMLHTTP As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
        Dim start_time As Date
        Dim end_time As Date
    
    
        lastRow = Range("A" & Rows.Count).End(xlUp).Row
    
    
        Dim cookie As String
        Dim result_cookie As String
    
    
        start_time = Time
        Debug.Print "start_time:" & start_time
    
    
        For i = 2 To lastRow
    
    
            url = "https://www.google.co.in/search?q=" & Cells(i, 1) & "&rnd=" & WorksheetFunction.RandBetween(1, 10000)
    
    
            Set XMLHTTP = CreateObject("MSXML2.serverXMLHTTP")
            XMLHTTP.Open "GET", url, False
            XMLHTTP.setRequestHeader "Content-Type", "text/xml"
            XMLHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0"
            XMLHTTP.send
    
    
                Set html = CreateObject("htmlfile")
            html.body.innerHTML = XMLHTTP.ResponseText
            Set objResultDiv = html.getelementbyid("rso")
            Set objH3 = objResultDiv.getelementsbytagname("H3")(0)
            Set link = objH3.getelementsbytagname("a")(0)
    
    
    
    
            str_text = Replace(link.innerHTML, "<EM>", "")
            str_text = Replace(str_text, "</EM>", "")
    
    
            Cells(i, 2) = str_text
            Cells(i, 3) = link.href
            DoEvents
        Next
    
    
        end_time = Time
        Debug.Print "end_time:" & end_time
    
    
        Debug.Print "done" & "Time taken : " & DateDiff("n", start_time, end_time)
        MsgBox "done" & "Time taken : " & DateDiff("n", start_time, end_time)
    End Sub
    Sapreste gentilmente spiegarmi cosa fa la macro esattamente e come mai non funziona quando ci sono annunci a pagamento?

    Grazie mille dell'aiuto/parere in anticipo!!



  2. I seguenti utenti hanno dato un "Like"


  3. #2

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4019
    Versione Office
    2013
    Likes ricevuti
    1228
    Likes dati
    923
    Bella domanda... :171:

    Purtroppo non saprei da dove iniziare...posso solo studiarmi i vari metodi/proprietà usati per vedere se riesco a tirarne fuori qualcosa.

    Comunque il link di riferimento dovrebbe essere questo:
    http://stackoverflow.com/questions/1...k-of-the-first

    P.S.
    Visto che non ha ancora risposto nessuno, metto la domanda in evidenza per un paio di giorni.

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  4. #3

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1017
    Versione Office
    .
    Likes ricevuti
    366
    Likes dati
    0
    Ciao,

    non ho modo di guardare in dettaglio ma, detto in parole terra-terra, se i risultati che ottieni non sono nell'ordine in cui appaiono nella pagina, direi che quasi sicuramente c'è uno script (javascript o jquery) che ordina i risultati dopo aver caricato la pagina, mentre la macro prende i dati prima dell'ordinamento (come ricevuti dal server). Questo rende le cose decisamente complicate.

  5. #4

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4019
    Versione Office
    2013
    Likes ricevuti
    1228
    Likes dati
    923
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Ciao,

    non ho modo di guardare in dettaglio ma, detto in parole terra-terra, se i risultati che ottieni non sono nell'ordine in cui appaiono nella pagina, direi che quasi sicuramente c'è uno script (javascript o jquery) che ordina i risultati dopo aver caricato la pagina, mentre la macro prende i dati prima dell'ordinamento (come ricevuti dal server). Questo rende le cose decisamente complicate.
    Ciao scossa,
    in effetti sembrerebbe così (usando il comando "ispeziona" del browser non sono riuscito a capire la "logica" con cui ordina gli elementi).

    Sono i riuscito a farmi restituire i 3 indirizzi ma come detto prima...non sono in ordine di visualizzazione del browser :240::251::292:

    [EDIT]
    credo che gli elementi siano ordinati in base all'evento "onmousedown". Non rimane che capire come ottenere il primo, il secondo e il terzo... cosa da niente :235:

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  6. #5
    L'avatar di Francesco2
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Londra
    Messaggi
    10
    Versione Office
    Excel 2010
    Likes ricevuti
    1
    Ciao Ragazzi,

    grazie delle riposte intanto!
    Allora, per darvi un po' piu' di info: Il meccanismo con cui vengono ordinati e abbastanza complesso.

    Gli annunci a pagamento sono attivati (in genere) da termini di ricerca commerciali (es. pizza domicilio Roma, Copra Rose, Nike scarpe corsa ecc..) compaiono fra i primi risultati e possono raggiungere un massimo di 4. Sono ordinati in base ad un meccanismo d'asta gestito da un software Google esterno (Google Adwords) ma come avete intuito e' tutto regolato da uno script.

    I risultati organici partono subito sotto l'ultimo annuncio a pagamento (quelli con il bollino giallo con la scritta "Ad") e l'ordine e' definito in base alla rilevanza del termine di ricerca con i contenuti del sito ed altri criteri che 'lalgoritmo Google tiene in considerazione.

    Come ho detto, quello che cerco di ottenere e' l'URL di destinazione del primo dei risultati Organici. La macro funziona perfettamente quando i risultati a pagamento non vengono attivati e , al contrario, quando ci sono annuci il risultato ottenuto non e' il primo o addirittura non e' presente sulla pagina:235::292:

    Grazie ancora per l'aiuto.

  7. #6

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1017
    Versione Office
    .
    Likes ricevuti
    366
    Likes dati
    0
    Ciao,

    l'unico modo "semplice" che mi viene in mente è usare un'istanza di IE anziché di MSXML2.serverXMLHTTP:

    Codice: 
    Sub GoogleFromIE()
      'by scossa
      Dim IE As Object
      Dim oDoc As Object
      Dim oId As Object
      Dim oRow As Object
      Dim oTD As Object
      Dim ws As Worksheet
      Dim j As Long
      Dim k As Long
      Dim w As Long
      Dim sHREF As String
      Dim nStart As Single
      
      On Error GoTo hndError_
      Set ws = ActiveSheet
      Set IE = CreateObject("InternetExplorer.Application")
      nStart = Timer
      With IE
        .Visible = False
        .Navigate "https://www.google.it/?gws_rd=ssl#safe=off&q=" & ws.Range("A1").Value
        Application.Wait (Now + TimeValue("0:00:02"))
        Do While (.busy Or .readystate <> 4) And (Timer - nStart < 40)
          Application.StatusBar = "connessione in corso: " & .busy & " " & .readystate & " " & Int(Timer - nStart)
          Application.Wait (Now + TimeValue("0:00:01"))
          DoEvents
        Loop
        Set oDoc = IE.Document
        Set oId = oDoc.getElementsByTagName("a")
        ws.UsedRange.Offset(0, 1).ClearContents
        j = 1
        k = 2
        w = 0
        For Each oRow In oId
          sHREF = oRow.href
          If Left(sHREF, 5) = "http:" And InStr(sHREF, "webcache") = 0 And InStr(sHREF, "google") = 0 And _
              oId(w).ID = "" And InStr(oId(w).outerhtml, "class=""fl""") = 0 Then
            ws.Cells(j, k).Value = oRow.innertext
            ws.Cells(j, k + 1).Value = oRow.href
            j = j + 1
          End If
          w = w + 1
          If j > 3 Then Exit For
        Next
      End With
    
    hndError_:
      Application.StatusBar = False
      If Not IE Is Nothing Then IE.Quit
      Set oTD = Nothing
      Set oRow = Nothing
      Set oId = Nothing
      Set oDoc = Nothing
      Set IE = Nothing
      If Err.Number <> 0 Then
        MsgBox Err.Description, vbCritical, "ERRORE"
      Else
        MsgBox "dati estratti", vbInformation, "ESTRAZIONE"
      End If
      
    End Sub
    Scrivere in A1 la stringa di ricerca e lanciare la macro.

    Giusto come spunto e da testare con varie stringhe di ricerca.

  8. I seguenti 2 utenti hanno dato un "Like" a scossa per questo post:


  9. #7

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4019
    Versione Office
    2013
    Likes ricevuti
    1228
    Likes dati
    923
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Ciao,
    l'unico modo "semplice" che mi viene in mente è usare un'istanza di IE anziché di MSXML2.serverXMLHTTP:
    Ok scossa,
    mi prendo una settimana di ferie e me la studio :270:
    :97:

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  10. #8

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7149
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2064
    Likes dati
    1300
    Grande scossa! :255:
    Dovrò prendermi anch'io tante ferie (una settimana non mi basta) per studiarmela bene! :262:
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  11. #9

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1017
    Versione Office
    .
    Likes ricevuti
    366
    Likes dati
    0
    Ciao,

    è solo uno spunto con molte "incognite": ad esempio escludo a priori i link "https" ma bisognerebbe approfondire se comporta l'eliminazione di link validi ..... se trovate stringhe di ricerca "critiche" si può cercare di affinare il motore.

  12. #10
    L'avatar di Francesco2
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Londra
    Messaggi
    10
    Versione Office
    Excel 2010
    Likes ricevuti
    1
    Grazie Mille Scossa!

    Ho appena eseguito alcuni test ma sfortunatamente i link che restituisce non sono i primi tre dei risultati organici. Per una sola prova ho ottenuto il primo risultato, per alcune prove ho ottenuto l'URL di un risultato di ricerca casuale (credo il 4), per altre prove l'URL dell'ultimo risultato di ricerca. :223:

    Potrei anche fare a meno del secondo e del terzo se riuscissi ad estrapolare anche solo il risultato del primo link organico ma a questo punto temo non sia una cosa fattibile! :223::223:

    Grazie mille della disponibilita', davvero molto gentili e veloci!

  13. #11

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1017
    Versione Office
    .
    Likes ricevuti
    366
    Likes dati
    0
    Ciao,

    sarebbe utile indicassi le stringhe di ricerca che ti hanno dato problemi, perché quelle poche che ho provato io mi davano risultati coerenti.

  14. #12
    L'avatar di Francesco2
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Londra
    Messaggi
    10
    Versione Office
    Excel 2010
    Likes ricevuti
    1
    Ciao Scossa,

    e una questione un po' complessa. Io ho provato queste:

    pizza delivery
    buy food online
    cheap heaircut London

    Ora, come detto prima il problema si verifica principalmente quando ci sono di mezzo gli annunci. Queste ricerche attivano tutte annunci a pagamento. Ma gli annunci a pagamento si attivano in base alla localita' in cui si e' quando si effettua la ricerca. Quindi se tu provi queste stesse richerche potrebbe funzionare.

    Con "pizza delivery" avviando la macro ottengo:

    Pizza Delivery - Free online games at Agame.com
    http://www.agame.com/game/pizza-delivery
    knowyourmobile.com
    http://www.knowyourmobile.com/android-apps/best-android-apps/21428/best-android-apps-your-phone-tablet-2014/page/0/7

    ma quello che vedo se cerco in google e' questo:



    Quello che mi serve e' il link dell'annuncio qui sopra (Freccia blu), il primo dei risultati organici.

  15. #13

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1017
    Versione Office
    .
    Likes ricevuti
    366
    Likes dati
    0
    Citazione Originariamente Scritto da Francesco2 Visualizza Messaggio
    Quello che mi serve e' il link dell'annuncio qui sopra (Freccia blu), il primo dei risultati organici.
    Effettivamente, considerando che oltretutto la ricerca non la fai in Italia, e che le pagine del risultato sono, diciamo così, "geolocalizzate" dubito di poterti aiutare (anche facendo la ricerca su google.co.uk ottengo pagine diverse dalla tua).

    Mi spiace.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  16. #14
    L'avatar di Francesco2
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Londra
    Messaggi
    10
    Versione Office
    Excel 2010
    Likes ricevuti
    1
    Immaginavo :223::223:

    Grazie mille per averci provato!

Discussioni Simili

  1. [Risolto] importare dati da google maps
    Di stefanoste78 nel forum Domande su Excel VBA e MACRO
    Risposte: 8
    Ultimo Messaggio: 27/01/17, 12:04
  2. [Risolto] Creare una macro che mi faccia una sottrazione da un risultato finale
    Di Giovannino nel forum Domande su Excel VBA e MACRO
    Risposte: 12
    Ultimo Messaggio: 11/12/16, 23:34
  3. Macro che restituisce ora corrente
    Di Lety88 nel forum Domande su Excel VBA e MACRO
    Risposte: 16
    Ultimo Messaggio: 11/03/16, 17:28
  4. importare in google calendar
    Di Diego nel forum Domande su Excel in generale
    Risposte: 0
    Ultimo Messaggio: 14/01/16, 18:13
  5. Come aggirare i spreadsheets di google
    Di Alessandro nel forum Domande su Excel in generale
    Risposte: 3
    Ultimo Messaggio: 09/12/15, 12:45

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •