Visualizzazione risultati 1 fino 15 di 15
Like Tree1Likes
  • 1 Post By alemoppo

Discussione: Prova Web Scraper mi da errore

  1. #1
    OMGFRENK non è connesso Utente giovane
    Data registrazione
    22-01-2020
    Messaggi
    30

    Predefinito Prova Web Scraper mi da errore

    salve seguendo alcuni tutorial sto cercando di eseguire lo scraping...
    scraping fatto sul sito pesdb.net/2020 per scaricare alcuni parametri dei giocatori...
    sto cercando di utilizzare questa funzione per aggiornare il database nel momento in cui ci siano nuovi giocatori..
    al momento abbiamo gia la funzione aggiungi ma siamo obbligati a scrivere i dati e potrebbe scapparci un errore..
    mentre con lo scraping basterebbe inserire solo il suo id





    parte del codice
    Codice PHP:
    <?php
    //require 'dati_pes.php';
    $id = $_POST['playerID'];
    $url = 'http://pesdb.net/pes2020/?id=';
    $nome = $_POST['playerName'];
    /*$eta = $_POST['playerAge'];
    $posizione = $_POST['playerPosition'];
    $ov = $_POST['playerOverall'];*/


    $pagina_giocatore = $url.$id;

    $_POST['playerName'] = $pagina_giocatore ->find ("table.[table_0.player/tbody/tr/td/table/tbody/tr/th[contains(.,'Player Name')]]");


    ?>
    id del giocatore viene inserita manualmente tramite un input ...e ho concatenato il post id al link

    nel mio caso mi servirebbe il nome l età il ruolo e la valutazione...
    ho provato solo con il nome ma mi da errore
    <b>Fatal error: Call to a member function find() on null in /membri/omgfrenk/scraping.php on line 196</b>

    qualcuno potrebbe illuminarmi?
    sicuro ho sbagliato il percorso ispezionando la pagina
    grazie
    link ronaldo
    http://pesdb.net/pes2020/?id=4522
    Ultima modifica di OMGFRENK : 15-06-2020 alle ore 11.57.39

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Quale tutorial stai seguendo? Stai cercando di invocare un metodo su una stringa, è naturale che non funzioni.
    Inoltre stai assegnando l'ipotetico risultato della ricerca a $_POST, il che è molto strano.

    I suggerimenti che do più spesso:


  3. #3
    omgprova non è connesso Utente giovane
    Data registrazione
    03-02-2020
    Messaggi
    71

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Quale tutorial stai seguendo? Stai cercando di invocare un metodo su una stringa, è naturale che non funzioni.
    Inoltre stai assegnando l'ipotetico risultato della ricerca a $_POST, il che è molto strano.
    Ciao...e grazie per l attenzione..
    $_post a mio modo sicuro errato per quanto mi stai dicendo l ho messo perché ho la query che mi va a registrare i dati nel database..
    E inserendo $ post[playerName] andrebbe a registrare il nome......
    Forse avrei dovuto mettere $row_dataplayer[playerName] = $pagina_giocatore ecc.. Mi chiedo il percorso dato per estrapolare il nome è giusto? Sicuro non lo è..
    Come lo dovrei scrivere?
    Ancora grazie

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Andiamo per gradi.

    $_post a mio modo sicuro errato per quanto mi stai dicendo l ho messo perché ho la query che mi va a registrare i dati nel database..
    Nel brano di codice che hai mostrato non ci sono query, immagino che quanto dici si riferisca a una seconda parte del codice che viene eseguita successivamente e si occupa dell'inserimento nella base di dati.

    E inserendo $ post[playerName] andrebbe a registrare il nome......
    Di per se no, vai semplicemente a scrivere un valore in una variabile. Anche qui immagino che l'inserimento avvenga successivamente, e i dati vengano letti da $_POST. Tecnicamente non è un errore, ma generalmente $_POST viene considerato in sola lettura, rappresenta i dati che la pagina ha ricevuto in seguito ad una richiesta, dunque scriverci dentro non sembra naturale o intuitivo. La prassi vede piuttosto la preparazione dei dati in altre variabili o vettori, appositamente creati, che sono poi utilizzati nelle query per la scrittura nella base di dati.

    Forse avrei dovuto mettere $row_dataplayer[playerName] = $pagina_giocatore ecc.. Mi chiedo il percorso dato per estrapolare il nome è giusto? Sicuro non lo è..
    Non è un problema di "percorso", piuttosto di quello che stai cercando di fare. Nel migliore dei casi la variabile $pagina_giocatore contiene una stringa, non un oggetto. La scrittura $pagina_giocatore->find(...) non ha quindi alcun senso a prescindere dal percorso che le passi.
    Posso intuire che tu abbia seguito qualche tutorial in cui l'autore propone l'uso di una classe di una qualche libreria per web scraping in cui un oggetto appositamente istanziato definisca un metodo find che permetta di leggere il contenuto di un elemento del DOM, qualcosa di simile a questo:
    Codice PHP:
    <?php
    $scraper
    = new WebScraper();
    $scraper->setPage("http://pesdb.net/pes2020/?id=4522");
    $player_name = $scraper->find("table.[table_0.player/tbody/tr/td/table/tbody/tr/th[contains(.,'Player Name')]]");
    In questo caso, però, devi a tua volta utilizzare la stessa classe proposta dall'autore del tutorial, o una alternativa equivalente, o definire un tuo sistema per lo scraping. In ogni caso tieni conto che la sintassi usata dall'autore per il "percorso" del dato, ovvero table.[table_0.player/tbody/tr/td/table/tbody/tr/th[contains(.,'Player Name')]] ha senso unicamente per la libreria che ha usato. Un'altra libreria o un codice scritto a mano non saprebbero come gestirlo.

    In breve, se stai facendo riferimento a un tutorial assicurati di seguirlo pedissequamente, e se hai comunque problemi segnala qual'è il tutorial così da poter verificare.
    Ultima modifica di mzanella : 15-06-2020 alle ore 17.31.29

    I suggerimenti che do più spesso:


  5. #5
    omgprova non è connesso Utente giovane
    Data registrazione
    03-02-2020
    Messaggi
    71

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Andiamo per gradi.


    Nel brano di codice che hai mostrato non ci sono query, immagino che quanto dici si riferisca a una seconda parte del codice che viene eseguita successivamente e si occupa dell'inserimento nella base di dati.


    Di per se no, vai semplicemente a scrivere un valore in una variabile. Anche qui immagino che l'inserimento avvenga successivamente, e i dati vengano letti da $_POST. Tecnicamente non è un errore, ma generalmente $_POST viene considerato in sola lettura, rappresenta i dati che la pagina ha ricevuto in seguito ad una richiesta, dunque scriverci dentro non sembra naturale o intuitivo. La prassi vede piuttosto la preparazione dei dati in altre variabili o vettori, appositamente creati, che sono poi utilizzati nelle query per la scrittura nella base di dati.


    Non è un problema di "percorso", piuttosto di quello che stai cercando di fare. Nel migliore dei casi la variabile $pagina_giocatore contiene una stringa, non un oggetto. La scrittura $pagina_giocatore->find(...) non ha quindi alcun senso a prescindere dal percorso che le passi.
    Posso intuire che tu abbia seguito qualche tutorial in cui l'autore propone l'uso di una classe di una qualche libreria per web scraping in cui un oggetto appositamente istanziato definisca un metodo find che permetta di leggere il contenuto di un elemento del DOM, qualcosa di simile a questo:
    Codice PHP:
    <?php
    $scraper
    = new WebScraper();
    $scraper->setPage("http://pesdb.net/pes2020/?id=4522");
    $player_name = $scraper->find("table.[table_0.player/tbody/tr/td/table/tbody/tr/th[contains(.,'Player Name')]]");
    In questo caso, però, devi a tua volta utilizzare la stessa classe proposta dall'autore del tutorial, o una alternativa equivalente, o definire un tuo sistema per lo scraping. In ogni caso tieni conto che la sintassi usata dall'autore per il "percorso" del dato, ovvero table.[table_0.player/tbody/tr/td/table/tbody/tr/th[contains(.,'Player Name')]] ha senso unicamente per la libreria che ha usato. Un'altra libreria o un codice scritto a mano non saprebbero come gestirlo.

    In breve, se stai facendo riferimento a un tutorial assicurati di seguirlo pedissequamente, e se hai comunque problemi segnala qual'è il tutorial così da poter verificare.
    Ancora grazie...il tutorial fa riferimento allo scraping di un titolo o di un immagine...e seguendo la sua logica ho inserito io tutti gli altri dati..
    Come $pagina_giocatore = all url+id
    ID che sono io a metterlo manualmente in un input
    Idem per il percorso...
    Lui indica dove sta la sua immagine...io indico dove sta il nome giocatore...
    Poi si il find l ho messo perché lui lo mette..
    Ultima modifica di omgprova : 15-06-2020 alle ore 22.52.31

  6. #6
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Tutto questo funziona usando la stessa libreria o framework del tutorial, cosa che sembra tu non stia facendo al momento ;)
    Perché non usi semplicemente le stesse classi proposte nel tutorial?

  7. #7
    omgprova non è connesso Utente giovane
    Data registrazione
    03-02-2020
    Messaggi
    71

    Predefinito

    eliminando tutto il codice precedente, inserendo il file
    simple_html_dom.php e includendolo nel file scraping.php
    utilizzando questo codice

    Codice PHP:
    <?php

    include "scraping/simple_html_dom.php";

    // Create DOM from URL or file
    $html = file_get_html('http://www.google.com/');

    // Find all images
    foreach($html->find('img') as $element)
    echo
    $element->src . '<br>';

    // Find all links
    foreach($html->find('a') as $element)
    echo
    $element->href . '<br>';
    ho questo risultato
    /images/branding/googlelogo/1x/googlelogo_white_background_color_272x92dp.png
    /textinputassistant/tia.png
    https://www.google.com.ua/webhp?tab=ww
    http://www.google.com.ua/imghp?hl=uk&tab=wi
    http://maps.google.com.ua/maps?hl=uk&tab=wl
    http://www.youtube.com/?gl=UA&tab=w1
    http://news.google.com.ua/nwshp?hl=uk&tab=wn
    https://mail.google.com/mail/?tab=wm
    https://drive.google.com/?tab=wo
    https://www.google.com/calendar?tab=wc
    https://www.google.com.ua/intl/uk/about/products?tab=wh
    http://translate.google.com.ua/?hl=uk&tab=wT
    http://www.blogger.com/?tab=wj
    https://photos.google.com/?tab=wq&pageId=none
    https://docs.google.com/document/?usp=docs_alc
    https://www.google.com.ua/intl/uk/about/products?tab=wh
    https://accounts.google.com/ServiceL...ww.google.com/
    http://www.google.com.ua/preferences?hl=uk
    /preferences?hl=uk
    http://www.google.com.ua/history/optout?hl=uk
    /advanced_search?hl=uk&authuser=0
    https://www.google.com/url?q=https:/...UNoA_AQ8IcBCAU
    http://www.google.com/setprefs?sig=0...UNoA_AQ2ZgBCAc
    http://www.google.com.ua/intl/uk/ads/
    http://www.google.com.ua/intl/uk/services/
    /intl/uk/about.html
    http://www.google.com/setprefdomain?...O-RxJYBGBSo%3D

    ----------------------------------------
    cambiando il link
    google.com con pesdb.net/pes2020/

    mi da l errore
    Fatal error: Call to a member function find() on boolean in /membri/omgfrenk/scraping.php on line 9
    riga 9 sarebbe questa====>>> foreach($html->find('img') as $element)

    andando per gradi come dovrei cambiare il codice per farlo funzionare sul link inserito da me?

    grazie in anticipo a chi potà aiutarmi

    questo è il link della nuova guida che sto cercando di seguire...
    https://simplehtmldom.sourceforge.io/
    Ultima modifica di omgprova : 18-06-2020 alle ore 23.45.19

  8. #8
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Modificando l'URL non riesco a riprodurre il problema. Usando
    Codice PHP:
    <?php
    include "scraping/simple_html_dom.php";

    // Create DOM from URL or file
    $html = file_get_html('http://www.pesdb.net/pes2020/');

    // Find all images
    foreach($html->find('img') as $element)
    echo
    $element->src . '<br>';

    // Find all links
    foreach($html->find('a') as $element)
    echo
    $element->href . '<br>';
    Ottengo:
    Codice:
    images/pesdb2020_logo.png<br>
    images/pesdb2019_logo_small.png<br>
    images/ball4.png<br>
    images/ball4.png<br>
    images/ball4.png<br>
    images/ball4.png<br>
    images/ball4.png<br>
    images/ball4.png<br>
    ...
    Hai sbloccato le connessioni server-to-server?

    I suggerimenti che do più spesso:


  9. #9
    omgprova non è connesso Utente giovane
    Data registrazione
    03-02-2020
    Messaggi
    71

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Modificando l'URL non riesco a riprodurre il problema. Usando
    Codice PHP:
    <?php
    include "scraping/simple_html_dom.php";

    // Create DOM from URL or file
    $html = file_get_html('http://www.pesdb.net/pes2020/');

    // Find all images
    foreach($html->find('img') as $element)
    echo
    $element->src . '<br>';

    // Find all links
    foreach($html->find('a') as $element)
    echo
    $element->href . '<br>';
    Ottengo:
    Codice:
    images/pesdb2020_logo.png<br>
    images/pesdb2019_logo_small.png<br>
    images/ball4.png<br>
    images/ball4.png<br>
    images/ball4.png<br>
    images/ball4.png<br>
    images/ball4.png<br>
    images/ball4.png<br>
    ...
    Hai sbloccato le connessioni server-to-server?
    ������
    Com è possibile���� a te funziona..
    Non credo d'aver bloccato qualcosa perché con il codice google funziona edit(ho visto che c'è una lista di siti accessibile)
    Sono certo d aver utilizzato anche www

    edit
    riprovato con www mi da sempre lo stesso errore...come verifico la connessione server to server
    edit
    trovato... l ho attivato adesso senza limitazioni(ma non mi ha chiesto nessun sms forse perchè gia avevo attivato https?)...ma non va lo stesso(dovrei usare una libreria cURL(dovrei avere questa libreria?)

    ho provato così
    Codice PHP:
    $html = fsockopen(file_get_html ('http://www.pesdb.net/pes2020/'));

    // Find all images
    foreach($html->find('img') as $element)
    echo
    $element->src . '<br>';

    // Find all links
    foreach($html->find('a') as $element)
    echo
    $element->href . '<br>';
    poi così
    Codice PHP:
    <?php
    include "scraping/simple_html_dom.php";

    // Create DOM from URL or file
    $html = file_get_html ($url);

    // Find all images
    foreach($html->find('img') as $element)
    echo
    $element->src . '<br>';

    // Find all links
    foreach($html->find('a') as $element)
    echo
    $element->href . '<br>';



    $url = "'http://www.pesdb.net/pes2020/'";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_URL, $url);
    $out = curl_exec($ch);
    curl_close($ch);
    echo
    $out;
    ?>
    e poi così
    Codice PHP:
    <?php
    include "scraping/simple_html_dom.php";

    $url = "'http://www.pesdb.net/pes2020/'";
    // Create DOM from URL or file
    $html = fsockopen(file_get_html ($url, 80, $errno, $errstr, 30));

    // Find all images
    foreach($html->find('img') as $element)
    echo
    $element->src . '<br>';

    // Find all links
    foreach($html->find('a') as $element)
    echo
    $element->href . '<br>';
    ma niente
    Ultima modifica di omgprova : 19-06-2020 alle ore 22.40.31

  10. #10
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Prova a inserire un error_reporting(E_ALL); in modo da visualizzare eventuali errori:
    Codice PHP:
    <?php
    error_reporting
    (E_ALL);
    include
    "scraping/simple_html_dom.php";

    // Create DOM from URL or file
    $html = file_get_html('http://www.pesdb.net/pes2020/');

    // Find all images
    foreach($html->find('img') as $element)
    echo
    $element->src . '<br>';

    // Find all links
    foreach($html->find('a') as $element)
    echo
    $element->href . '<br>';

    I suggerimenti che do più spesso:


  11. #11
    omgprova non è connesso Utente giovane
    Data registrazione
    03-02-2020
    Messaggi
    71

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Prova a inserire un error_reporting(E_ALL); in modo da visualizzare eventuali errori:
    Codice PHP:
    <?php
    error_reporting
    (E_ALL);
    include
    "scraping/simple_html_dom.php";

    // Create DOM from URL or file
    $html = file_get_html('http://www.pesdb.net/pes2020/');

    // Find all images
    foreach($html->find('img') as $element)
    echo
    $element->src . '<br>';

    // Find all links
    foreach($html->find('a') as $element)
    echo
    $element->href . '<br>';
    Buongiorno e grazie ancora ...
    Ho provato mi da parse error include
    Ho portato simple_html_dom.php fuori la cartella e modificando il percorso nel file scraping ma sempre errore..
    Ho provato ad escluderlo mi da errore sulla riga $html = file_get_html('http://www.pesdb.net/pes2020');

  12. #12
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,259

    Predefinito

    Salve,
    ho fatto delle prove anch'io, e anche a me, con Google funziona e con qull'indirizzo no. Così come con un altro mio sito non AlterVista.

    Warning: file_get_contents(http://www.graphogl.onweb.it/): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in /membri/graphoglrisorse/forum-img/scraping/simple_html_dom.php on line 83


    Fatal error: Call to a member function find() on boolean in /membri/graphoglrisorse/forum-img/scraping/TestScrapping.php on line 10

    Il primo è l'errore che vinene segalato con error_reporting(E_ALL);

    Credo che il secondo errore, dipenda da misure di sicurezza che bloccano lo scipt generando l'errore.

    Coridli saluti.
    Ultima modifica di GraphOGLRisorse : 20-06-2020 alle ore 13.01.50

  13. #13
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Warning: file_get_contents(http://www.graphogl.onweb.it/): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in /membri/graphoglrisorse/forum-img/scraping/simple_html_dom.php on line 83
    Questo spiega tutto, la libreria cerca di leggere le pagine web usando file_get_contents. Per funzionare è necessario che allow_url_fopen si attivo, ma su AlterVista non lo è e non è possibile attivarlo. Non c'è verso che funzioni.

    Quella libreria andrebbe riscritta usando cURL (o fscokopen), basarsi su file_get_contents non è realistico. Ti conviene passare ad altre librerie, come Ultimate Web Scraper Toolkit.

    I suggerimenti che do più spesso:


  14. #14
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,709

    Predefinito

    allow_url_fopen abilitando le connessioni server to server, è attivo su AlterVista.

    Questo codice:
    Codice PHP:
    <?php
    echo file_get_contents('http://www.graphogl.onweb.it/');
    Produce questo risultato.

    Avete attivato le connessioni server to server?

    Ciao!
    mzanella likes this.

  15. #15
    omgprova non è connesso Utente giovane
    Data registrazione
    03-02-2020
    Messaggi
    71

    Predefinito

    risolto è bastato scrivere così..grazie
    Codice PHP:
    <?php
    error_reporting
    (E_ALL); ?>
    <?php
    include("simple_html_dom.php");

    $html = file_get_html('http://www.pesdb.net/pes2020/);

    // Find all images
    foreach($html->find('
    img') as $element)
    echo $element->src . '
    <br>';

    // Find all links
    foreach($html->find('
    a') as $element)
    echo $element->href . '
    <br>';
    Ultima modifica di omgprova : 20-06-2020 alle ore 22.59.27

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •