Data scraping in PHP non funziona

puppalmao

Nuovo Utente
25 Nov 2021
4
0
1
Ciao a tutti, sto cercando di recuperare dei dati da un sito web tramite il data scraping in php dal lato server, questo è il codice (ho seguito il tutorial su MRW):
PHP:
$uri = 'https://www.pinksale.finance/#/launchpad/0x18fFf1570A132cBA8bF157145876BFbE56325b2D?chain=BSC';
$get = file_get_contents($uri);
echo $get;
Però come risultato da una pagina vuota, penso chje accada perchè il sito ha bloccato il data scraping, infatti con la home di google funziona.
Qualcuno sa come posso ovviare a questo blocco o risolvere?
Grazie a chi risponderà!
 
Ciao, giusto una piccola indicazione che potrebbe tornare utile per capire come (e se) puoi intervenire o se non ne vale la pena: accedendo a quel sito, i contenuti di quella pagina vengono aggiunti al volo via javascript attraverso delle promise (delle chiamate asincrone a risorse esterne). I contenuti sono quindi disponibili solo una volta che la pagina è aperta sul browser e vengono eseguiti gli script necessari per recuperare i contenuti esterni e mostrarli nella pagina stessa.

Quello che ricevi dal tuo php, presumo non sia un documento vuoto ma probabilmente contiene solo il codice di base html per il quale non viene mostrato nulla con quell'echo perché i contenuti non sono presenti e non vengono comunque caricati se non eseguendo la pagina sul browser e dal sito stesso.

I contenuti vengono infatti caricati con l'esecuzione del javascript presente proprio in quella pagina e di altri file js esterni, che se non eseguiti opportunamente non producono risultato.

Non so se lato server esista qualche particolare tecnica per ottenere il risultato elaborato dall'esecuzione del javascript presente sulla pagina. Presumo di sì ma personalmente non so dirti di più.

La home di google non viene generata da javascript, si tratta di "puro" html, per questo ricevi comunque un output.

penso chje accada perchè il sito ha bloccato il data scraping

In questo caso, più che "bloccare", direi che sono state usate tecniche che rendono difficilmente attuabile lo scraping
 
Ciao, giusto una piccola indicazione che potrebbe tornare utile per capire come (e se) puoi intervenire o se non ne vale la pena: accedendo a quel sito, i contenuti di quella pagina vengono aggiunti al volo via javascript attraverso delle promise (delle chiamate asincrone a risorse esterne). I contenuti sono quindi disponibili solo una volta che la pagina è aperta sul browser e vengono eseguiti gli script necessari per recuperare i contenuti esterni e mostrarli nella pagina stessa.

Quello che ricevi dal tuo php, presumo non sia un documento vuoto ma probabilmente contiene solo il codice di base html per il quale non viene mostrato nulla con quell'echo perché i contenuti non sono presenti e non vengono comunque caricati se non eseguendo la pagina sul browser e dal sito stesso.

I contenuti vengono infatti caricati con l'esecuzione del javascript presente proprio in quella pagina e di altri file js esterni, che se non eseguiti opportunamente non producono risultato.

Non so se lato server esista qualche particolare tecnica per ottenere il risultato elaborato dall'esecuzione del javascript presente sulla pagina. Presumo di sì ma personalmente non so dirti di più.

La home di google non viene generata da javascript, si tratta di "puro" html, per questo ricevi comunque un output.



In questo caso, più che "bloccare", direi che sono state usate tecniche che rendono difficilmente attuabile lo scraping
grazie dei chiarimenti, non sono molto esperto in questo ambito. sai se esiste qualche altro modo per recuperare i dati che si vedono dal browser? (non per forza lato server, in qualunque modo)
 
Modi semplici non ne conosco. Non so se esistano dei software o dei plugin specifici per ottenere ciò che ti serve, magari prova a fare qualche ricerca sul web, se già non l'hai fatta, o attendi qualche altro eventuale suggerimento.

Il metodo di intervento dipende comunque da svariati fattori. In primis c'è il fatto che i contenuti non sono resi immediatamente disponibili su quella pagina ma è necessario che si attenda il loro effettivo caricamento. La questione in questo senso diventa relativamente complessa da gestire.

Io personalmente, in casi del genere, attraverso il browser andrei ad iniettare del javascript direttamente sulla pagina in questione (magari creando un estensione su chrome, o usando un qualche plugin per iniettare codice), in modo da poter creare un sistema di controllo dell'avvenuto caricamento dei contenuti per poi poterli processare come mi serve.

Ma, non per scoraggiarti, ripeto, la cosa non è così semplice o scontata da sviluppare. Di certo è necessario avere una buona base del linguaggio di programmazione adoperato e delle varie tecniche da impiegare per arrivare ad una possibile soluzione.

Non ho comunque soluzioni concrete, i miei sono solo dei consigli in linea teorica. Magari è possibile che ci siano dei sistemi già pronti all'uso o quantomeno dei metodi semplici da applicare. Per quel che mi riguarda, il mio contributo si limita a questi pochi consigli.

Buona continuazione :)
 
Modi semplici non ne conosco. Non so se esistano dei software o dei plugin specifici per ottenere ciò che ti serve, magari prova a fare qualche ricerca sul web, se già non l'hai fatta, o attendi qualche altro eventuale suggerimento.

Il metodo di intervento dipende comunque da svariati fattori. In primis c'è il fatto che i contenuti non sono resi immediatamente disponibili su quella pagina ma è necessario che si attenda il loro effettivo caricamento. La questione in questo senso diventa relativamente complessa da gestire.

Io personalmente, in casi del genere, attraverso il browser andrei ad iniettare del javascript direttamente sulla pagina in questione (magari creando un estensione su chrome, o usando un qualche plugin per iniettare codice), in modo da poter creare un sistema di controllo dell'avvenuto caricamento dei contenuti per poi poterli processare come mi serve.

Ma, non per scoraggiarti, ripeto, la cosa non è così semplice o scontata da sviluppare. Di certo è necessario avere una buona base del linguaggio di programmazione adoperato e delle varie tecniche da impiegare per arrivare ad una possibile soluzione.

Non ho comunque soluzioni concrete, i miei sono solo dei consigli in linea teorica. Magari è possibile che ci siano dei sistemi già pronti all'uso o quantomeno dei metodi semplici da applicare. Per quel che mi riguarda, il mio contributo si limita a questi pochi consigli.

Buona continuazione :)
Ok, grazie. Ho già cercato un po' ma non ho trovato nulla. Vediamo se risponderà qualcun'altro. :)
 

Discussioni simili