Condividi:        

Quale metodo per prelevare n pagine web ?

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Quale metodo per prelevare n pagine web ?

Postdi Gianca532011 » 06/02/18 20:53

Ciao,
ho tentato, con parziale successo, di applicare una macro prelevata qui ma poi mi sono " Inceppato" .

Devo scaricare da un sito di finanza una serie di pagine che si creano automaticamente sulla base della selezione fatta dall'utente. Le pagine differiscono per il solo riferimento di riga che rappresenta l'inizio della nuova tabella (vedi doc ). Secondo questa macro aggiungo il link della pagina per poi recuperare le tabelle e incollarle sequenzialmente in foglio1 .

Ora tutto ciò va bene se le pagine sono 2 ma se le stesse sono 3 o 5 o 10 ci deve essere un metodo più semplice = meno macchinoso per scaricare e accodare le tabelle ? ma quale ?
Allego il file excel e l'elenco dei link generati dalla interrogazione del sito.

http://www.filedropper.com/multiplepage
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 326
Iscritto il: 27/05/11 10:18

Sponsor
 

Re: Quale metodo per prelevare n pagine web ?

Postdi Anthony47 » 06/02/18 23:56

Se ti puo' bastare:
-tu vedi che il sito ha N pagine (es 6)
-ti accerti che il tuo file abbia N fogli

Modifiche la sub CALL1 come segue
Codice: Seleziona tutto
Sub call1()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
 
For I = 1 To 6               '<<< for I=1 to N°PaginePresenti
    Sheets(I).Select
    Cells.ClearContents            'NB: Il fofglio SARA' AZZERATO senza preavviso
    Call GetWebTab2Param("https://finviz.com/screener.ashx?v=162&f=cap_small,fa_debteq_u0.5,fa_div_o1,fa_epsyoy_pos,fa_fpe_u30,fa_pe_u30,fa_peg_u2,fa_roe_pos,fa_roi_pos&ft=2&r=" & 1 + (I - 1) * 20)
    Cells.WrapText = False
Next I
Etc etc

Cioe' imposti il ciclo secondo il numero di pagine da scaricare

Attenzione che ora la macro CANCELLERA' SENZA PREAVVISO il contenuto dei primi N fogli

Gli "etc etc" in coda alla macro sono per eventuali altri codici da eseguire.

Vedo che hai messo la Sub CALL1 nel modulo vba di foglio1; va tolta e spostata su un "modulo standard".

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Quale metodo per prelevare n pagine web ?

Postdi Gianca532011 » 07/02/18 20:47

Ciao Anthony e grazie per la sollecita risposta, ma purtroppo c'è qualcosa che non gira per il verso giusto, in pratica con il ciclo For ripete il download di una sola pagina, su N pagine, senza mai andare alla pagina successiva del sito.
Ho anche provato a fare diversi tentativi con la formula da te introdotta ma senza cavare un ragno dal buco.
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 326
Iscritto il: 27/05/11 10:18

Re: Quale metodo per prelevare n pagine web ?

Postdi Anthony47 » 08/02/18 00:24

In questo momento dall'indirizzo vengono presentati solo 28 righe di titoli su 2 pagine.
Ho impostato quindi For I = 1 To 2
Quello che ottengo e' coerente con quanto mi aspetto: il contenuto delle tabelle di Foglio1 (20 titoli) e' diverso da quello di Foglio2 (8 titoli); parlo della TABELLA_12.

Ti suggerisco inoltre di ripristinare il codice della Sub GetWebTab2Param come da me rilasciata; lo trovi qui:
viewtopic.php?p=637785#p636420

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Quale metodo per prelevare n pagine web ?

Postdi Gianca532011 » 08/02/18 14:03

Ciao Anthony, la tua modifica funziona bene ma, se posso definirla : scarica tutte le pagine da un solo links. La mia necessità, magari espressa male, era di avere il download dati da TUTTI i Links che si formano a seguito della selezione dei dati effettuata dall'utente ovvero, ad esempio da tutti i Links sotto riportati :

[img]INSERIRE QUI SOTTO i LINKS DA PRELEVARE
https://finviz.com/screener.ashx?v=121& ... fa_roi_pos
https://finviz.com/screener.ashx?v=121& ... i_pos&r=21
https://finviz.com/screener.ashx?v=121& ... i_pos&r=41
https://finviz.com/screener.ashx?v=121& ... i_pos&r=61
https://finviz.com/screener.ashx?v=121& ... i_pos&r=81
https://finviz.com/screener.ashx?v=121& ... _pos&r=101
[/img]

questi links rappresentano quindi, ciascuno, una o piu pagine di dati. Tra questi il primo link ha due pagine, gli altri solo una di 20 righe dati.
Ho risolto con questa macro, adattata che ti allego, che non è il massimo perchè devo copiarvi tutti i link, però ha il pregio di lasciare una certa libertà di scelta in caso di estrapolazione dati da diverse utenze (links).

http://www.filedropper.com/importadatid ... ltilinks01
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 326
Iscritto il: 27/05/11 10:18

Re: Quale metodo per prelevare n pagine web ?

Postdi Anthony47 » 08/02/18 17:30

Non ti seguo...
La macro al momento contiene questo url base:
Codice: Seleziona tutto
https://finviz.com/screener.ashx?v=162&f=cap_small,fa_debteq_u0.5,fa_div_o1,fa_epsyoy_pos,fa_fpe_u30,fa_pe_u30,fa_peg_u2,fa_roe_pos,fa_roi_pos&ft=2&r=

A questra stringa si concatena un valore che inizialmente e' 1, poi 21, poi 41 etc (in funzione di For I=1 to XX)
Tu citi un altro url:
Codice: Seleziona tutto
https://finviz.com/screener.ashx?v=121&f=fa_debteq_u0.5,fa_div_o1,fa_epsyoy_pos,fa_fpe_u30,fa_pe_u30,fa_peg_u2,fa_roe_pos,fa_roi_pos&r=


Dopo che ho inserito questo secondo valore come parametro della Call GetWebTab2Param, e inserendo nella macro For I=1 to 6 io ottengo, in 6 fogli diversi, differenti contenuti:
Codice: Seleziona tutto
No.  Ticker  Market Cap ...
1      AB     2.46B
2      ADES 173.18M

No.  Ticker  Market Cap ...
21     CNOB 925.24M
22     CNXM   1.28B
....etc etc
....etc etc
No.  Ticker  Market Cap ...
101    UBNK 806.51M
102    UMBF   3.72B

Quello che potrebbe trarti in inganno e' che ogni pagina contiene mooolte tabelle; quella che immagino ti interessa in queso momento si chiama TABELLA_20; stasera potrebbe chiamarsi TABELLA_9.

Pero' se dici che cosa vorresti fare allora magari lo facciamo in altro modo; io credo che il tuo caso sia similissimo a quello discusso e risolto qui: viewtopic.php?f=26&t=109394&p=641980#p641955

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Quale metodo per prelevare n pagine web ?

Postdi Gianca532011 » 08/02/18 18:26

Scoperto l'arcano :

https://finviz.com/screener.ashx?v=162&f=cap_small,fa_debteq_u0.5,fa_div_o1,fa_epsyoy_pos,fa_fpe_u30,fa_pe_u30,fa_peg_u2,fa_roe_pos,fa_roi_pos&ft=2&r=) questa si arresta dopo un solo link ed è pure diversa , ma è giusto cosi.

https://finviz.com/screener.ashx?v=121& ... oi_pos&r=) questa funziona su tutti i link multipli di 21 righe


Utilizzavo il link sopra, quindi è giusto che si fermi alle prime due pagine , i titoli sono 28, mentre con il secondo scarico tutti e 106 titoli.

Sorry per averti fatto perdere tempo e per averne perso, almeno 10 volte tanto, io :aaah
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 326
Iscritto il: 27/05/11 10:18

Re: Quale metodo per prelevare n pagine web ?

Postdi Gianca532011 » 10/02/18 18:40

Altro problema collaterale, la macro di cui sopra genera altri n fogli, da qui la necessità di identificare la famosa TABELLA_20 (1)e trasferirla pari pari su "Foglio1" (2), aggiungendole in sequenza (3)
Ora sino al punto 2, ci sono arrivato ma ... la sequenza non ci va!!!
Non riesco a creare il loop che mi faccia la scansione di tutti i fogli, a partire dal numero +basso, (escluso Foglio1 ed Elabora ) copiando la tavella 20 a aggiungendola l'una sotto l'altra. Allego quanto fatto .
La prima macro funziona ma non "sequenzia" un accidente , la seconda è un tentativo che non sono riuscito a integrare.

Codice: Seleziona tutto
Option Explicit
Sub Cerca_copia()
'
On Error GoTo 10
Dim ur As Long, uc As Long, UR1 As Long, UC1 As Long
Dim I As Long
Dim TextToFind As String
Dim Msg As String
Dim Response As Integer, Record As Integer
Dim Riga As Long, col As Long, x As Long, y As Long
Dim ws1, ws2  As Worksheet

TextToFind = "TABELLA_20"
Set ws1 = ActiveSheet
Set ws2 = Worksheets("Foglio1")

ws1.Activate
Columns("A:A").Select
Selection.Interior.ColorIndex = xlNone
Record = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row

For I = 1 To Record
Selection.Find(What:=TextToFind, After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False).Activate

ActiveCell.Select  ' trovata la cella la colora in giallo
With Selection.Interior
        .ColorIndex = 36
    End With
           'fino a qui sembra andare bene

Riga = 99  ' <<<<<< prima criticità : non è possibile sulla base della cella activa gia trovata sopra identificare il range senza fissarlo
'(una sorta di range variabile dato che questo riferimento puo varaiare di volta in volta ???

ur = Cells(Riga, 1).End(xlDown).Row    'per foglio activo
col = 1
uc = Cells(Riga, col).End(xlToRight).Column
Range(Cells(Riga, col), Cells(ur, uc).End(xlToRight)).Select

'UR1 = ws2.Range("A1" & Rows.Count).End(xlUp).Row          ' trova ultima riga piena di fo 1
'UC1 = ws2.Range("A1" & Columns.Count).End(xlLeft).Column  ' trova ultima colonna piena di fo 1
'Selection.Copy Destination:=ws2.Range(Cells(UR1, 1))        ' copia immediatamente sotto l'ultima riga
'<<<< questa non funziona ???? se rimossa e attivata la riga  sotto tutto funziona ma non accoda.
' ws2.Range("A" & UR1).PasteSpecial xlValues

Selection.Copy Destination:=ws2.Range("A1")


Next I

10:
End

Application.ScreenUpdating = True

ws2.Activate
Range("a1").Select

End Sub
 
Sub WorksheetLoop()

         Dim WS_Count As Integer
         Dim I As Integer
         WS_Count = ActiveWorkbook.Worksheets.Count
         
         For ws = 1 To WS_Count
         If ws.Name <> "Foglio1" And ws.Name <> "Elabora" Then

' qui dovrei inserire la copia-incolla -ma come integrare il tutto con la macro sopra ?

        End If
         Next ws
                               
            MsgBox ActiveWorkbook.Worksheets(I).Name
      End Sub



e qui il file

http://www.filedropper.com/3scaricawebm ... anthony03c
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 326
Iscritto il: 27/05/11 10:18

Re: Quale metodo per prelevare n pagine web ?

Postdi Gianca532011 » 11/02/18 14:35

Non tenete conto del pasticcio di cui sopra !!! ho risolto, parzialmente, con la macro allegata, anche se mancherebbe una "Chicca"
ovvero invece di specificare sia la casella (98,1) in cui trovasi TABELLA_20 e l'area di copia A99:R119, la ricerca fosse automatica, tenuto conto che l'area dati è sempre sotto la cella con la scritta Tabella-20.

Codice: Seleziona tutto
Sub Cerca_Copia()
Dim uR As Integer
Dim fg As Integer
Call Cancella
    uR = 1
     For fg = 1 To Sheets.Count
        If Sheets(fg).Name <> "Foglio1" And Sheets(fg).Name <> "Elabora" Then
            If Sheets(fg).Cells(98, "A") = "TABELLA_20" Then
                Sheets(fg).Range("A99:R119").Copy
                Sheets("Foglio1").Cells(uR, 1).PasteSpecial Paste:=xlAll
                uR = uR + 21
            End If
        End If
    Next fg
    Sheets("Foglio1").Activate
    Range("a1:R500").ClearFormats
    For RR = 1 To 505 Step 21
        Range("A" & RR & ":R" & RR).Interior.ColorIndex = 36
    Next RR
 

End Su
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 326
Iscritto il: 27/05/11 10:18

Re: Quale metodo per prelevare n pagine web ?

Postdi Anthony47 » 11/02/18 23:18

In questo momento su questo forum ci sono 3 discussioni che parlano di come importare dati da pagine web.
Una molto simile al tuo problema e' questa: viewtopic.php?f=26&t=100441&p=642086#p642035

Lì stiamo usando la Function GetTabRaim222, che consente di prelevare da un url una tabella specifica e posizionarne il contenuto in un'area specifica di un foglio Excel.
Vuoi vedere se ti aiuta?

Intanto mi pare che stai aggirando le difficolta' importando tutte le tabelle e poi spostando la tabella che ti serve nell'area finale.
La modifica che hai chiesto potrebbe riguardare questo pezzo:
Codice: Seleziona tutto
        If Sheets(FG).Name <> "Foglio1" And Sheets(FG).Name <> "Elabora" Then
            myMatch = Application.Match("TABELLA_20", Sheets(FG).Range("A1:A1000"), 0)
            If Not IsError(myMatch) Then
                Sheets(FG).Range("A" & myMatch).CurrentRegion.Copy
                Sheets("Foglio1").Cells(uR, 1).PasteSpecial Paste:=xlAll
                uR = uR + 21
            End If
        End If
(questa e' la versione che dovrebbe trovare da sola Tabella_20)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Quale metodo per prelevare n pagine web ?

Postdi Gianca532011 » 14/02/18 08:48

Perfetto, come sempre, grazie Anthony.
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 326
Iscritto il: 27/05/11 10:18


Torna a Applicazioni Office Windows


Topic correlati a "Quale metodo per prelevare n pagine web ?":

consumo pagine web
Autore: nikita75
Forum: Software Windows
Risposte: 4

Chi c’è in linea

Visitano il forum: Nessuno e 65 ospiti