Automatische data in een tabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dennis Jacobs

Dennis Jacobs

24/04/2012 23:33:43
Quote Anchor link
Ik heb een probleempje, ik ben bezig aan een site waarin ik een tabel wil zetten die 2 kolommen heeft.
In de ene kolom wil ik vaste gegevens inzetten, dit is geen enkel probleem. In de andere kolom wil ik dat er gegevens worden gehaald van een site die dan verwerkt worden en dan pas weergegeven worden in de andere kolom.

Dit alles klinkt misschien een beetje vaag en ik kan het niet duidelijker uitleggen als dit. Ik heb wel nog een voorbeeld gevonden op een site waar ik dagelijks op kijk.
LinkLink
De tabelletjes die op deze pagina staan die bedoel ik.

Alvast bedankt.
 
PHP hulp

PHP hulp

28/03/2024 22:16:07
 
Henk PHP

Henk PHP

25/04/2012 00:08:00
Quote Anchor link
Als ik je goed begrijp wil je de informatie uit een tabel op een externe website automatisch in je database krijgen? Wil je dit elke dag, elke week of zo doen? Dan moet je een cronjob gebruiken en een scriptje schrijven. Maar heel duidelijk ben je in ieder geval niet.
 
Dennis Jacobs

Dennis Jacobs

25/04/2012 00:12:08
Quote Anchor link
Nou, even een heel simpel voorbeeld:
Ik wil bijvoorbeeld de gegevens die in de rechterkolom staan (van bijv de link die ik gaf) eruit halen en rechtstreeks in mijn tabel zetten. Of ik deze eerst in mijn database moet zetten weet ik niet, als ze maar zichtbaar worden in mijn site.
Ik hoop dat dit wel duidelijk was?
 
Christiaan Scheermeijer

Christiaan Scheermeijer

25/04/2012 01:05:13
Quote Anchor link
Library: SimpleHTMLDom

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
require('simple_html_dom.php');

$table = array();

$html = file_get_html('http://www.dawsongold.nl/inkoopprijzen/');
foreach($html->find('tr') as $row) {
    $key = $row->find('td',0)->plaintext;
    $value = $row->find('td',1)->plaintext;
    
    $table[$key] = $value;
}


echo '<pre>';
print_r($table);
echo '</pre>';

?>
Gewijzigd op 25/04/2012 01:06:51 door Christiaan Scheermeijer
 
Henk PHP

Henk PHP

25/04/2012 02:01:47
Quote Anchor link
Ik zou het met de cURL library doen.

Zie hieronder voor een simpel voorbeeldje met toelichting.
Op mijn machine werkt dit.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php

// grab de data van deze url
function grab($url)
{

  // start nieuwe cUrl resource
  $cUrl = curl_init();
  // set the URL voor je request
  curl_setopt($cUrl, CURLOPT_URL, $url);
  // set RETURNTRANSFER naar true (hierdoor krijg je de HTML terug in een string ipv dat het meteen in de output komt)
  curl_setopt($cUrl, CURLOPT_RETURNTRANSFER, 1);
  // set the connection time-out naar 5 seconden
  $timeout = 5;
  curl_setopt($cUrl,CURLOPT_CONNECTTIMEOUT,$timeout);
  // start request
  $request = curl_exec($cUrl);
  // stop cUrl sessie
  curl_close($cUrl);
  // return je request
  return $request;
}


    // set de URL en grab de data
    $url = 'http://www.dawsongold.nl/inkoopprijzen/';
    $data = grab($url);
    
    // maak een nieuwe DOMDocument
    $dom = new DOMDocument();
    // laad je HTML-data
    $dom->loadHTML($data);
    // filter de content eruit
    $content = $dom->getElementById('content');
    // in dit geval: pak alle td-tags
    $tag = $content->getElementsByTagName('td');

    // voor elke tag
    foreach ($tag as $item) {

        // als style == 'text-align: center' (oftewel rechterkolom)
        if($item->getAttribute('style') == 'text-align: center')
        {

        // hier heb je je data
            echo $item->nodeValue;
        }
    }



?>
Gewijzigd op 25/04/2012 02:06:27 door Henk PHP
 
Dennis Jacobs

Dennis Jacobs

25/04/2012 08:34:19
Quote Anchor link
Ik zal eens proberen of ik hiermee verder kan. Ik laat wel horen of het gelukt is.
Alvast bedankt!

Toevoeging op 25/04/2012 14:37:55:

Het is me gelukt, ik heb alleen geen idee hoe ik de data, die ik uit de website heb gehaald, kan bewerken? Iemand die me daarmee kan helpen?
Alvast bedankt
 
Henk PHP

Henk PHP

25/04/2012 16:56:48
Quote Anchor link
Heb je uberhaupt ervaring met PHP of wil je dat wij alles voor je doen?

Wat is nu je code? Wat wil je bereiken?
 
Dennis Jacobs

Dennis Jacobs

25/04/2012 17:06:25
Quote Anchor link
Ik heb nog niet zo veel ervaring met PHP, maar ik dacht ook dat dit forum er voor was om hulp te vragen want er staat "Beginnen met PHP".
Ik heb alle basisvaardigheden (zoals je hele site maken d.m.v includes en de titel automatisch aanpassen en die dingen).
De rest wil ik nu leren.

Wat ik wil bereiken is dat ik de rechter kolom kan "scrapen" (hoe dat heet?) en deze data kan bewerken en daarna kan gebruiken in een andere tabel op mijn site. Het "scrape" gedeelte is gelukt nu wil ik het nog kunnen bewerken, dit kon ik helaas niet terugvinden door te zoeken op google.
 
Henk PHP

Henk PHP

25/04/2012 17:10:30
Quote Anchor link
Zucht.

Wat is je code op dit moment? (LEES: POST JE CODE HIERONDER)

Wat wil je bereiken? (LEES: WAT MOET AANGEPAST WORDEN, EN HOE WIL JE DAT LATEN GEBEUREN)

Als je hulp verlangt dan is het wel zo netjes om duidelijk aan te geven wat je van plan bent.
Gewijzigd op 26/04/2012 02:33:16 door Henk PHP
 
Dennis Jacobs

Dennis Jacobs

25/04/2012 17:49:40
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php

// grab de data van deze url
function grab($url)
{

  // start nieuwe cUrl resource
  $cUrl = curl_init();
  // set the URL voor je request
  curl_setopt($cUrl, CURLOPT_URL, $url);
  // set RETURNTRANSFER naar true (hierdoor krijg je de HTML terug in een string ipv dat het meteen in de output komt)
  curl_setopt($cUrl, CURLOPT_RETURNTRANSFER, 1);
  // set the connection time-out naar 5 seconden
  $timeout = 5;
  curl_setopt($cUrl,CURLOPT_CONNECTTIMEOUT,$timeout);
  // start request
  $request = curl_exec($cUrl);
  // stop cUrl sessie
  curl_close($cUrl);
  // return je request
  return $request;
}


    // set de URL en grab de data
    $url = 'http://www.dawsongold.nl/inkoopprijzen/';
    $data = grab($url);
    
    // maak een nieuwe DOMDocument
    $dom = new DOMDocument();
    // laad je HTML-data
    $dom->loadHTML($data);
    // filter de content eruit
    $content = $dom->getElementById('content');
    // in dit geval: pak alle td-tags
    $tag = $content->getElementsByTagName('td');

    // voor elke tag
    foreach ($tag as $item) {

        // als style == 'text-align: center' (oftewel rechterkolom)
        if($item->getAttribute('style') == 'text-align: center')
        {

        // hier heb je je data
            echo $item->nodeValue;
        }
    }



?>


Tot nu toe is dat mijn script. Ik heb deze in een include staan dus dat is alles wat ik heb, als dit script uitgevoerd wordt krijg ik letterlijk:
Quote:
Prijzen in euro €  11,16 per gram  21,25 per gram  27,24 per gram  30,25 per gram  32,72 per gram  35,70 per gram  Prijzen in euro €  39.112,- per kilo  229,- per stuk  115,- per stuk  127,- per stuk  255,- per stuk  1.192,- per stuk  1.192,- per stuk  Prijzen in euro €  707,- per kilo  3,10 per stuk  4,77 per stuk  7,16 per stuk  11,93 per stuk  7,16 per stuk  11,93 per stuk  14,65 per stuk  383,- per kilo  Prijzen in euro € 0,53 per gram 0,48 per gram 0,46 per gram


De data die ik hier uit krijg is de hele 2de row, dit is goed.

Nu wil ik deze in een tabel zetten, dus zo:

<table>
<tr>
<td> Tekst </td>
<td> de td die ik gescraped heb </td>
</tr>

<tr>
<td> Tekst </td>
<td> de 2de td die ik gescraped heb </td>
</tr>
</table>

En zo verder.
Ik hoop dat dit wel goed te volgen was, sorry als het hiervoor heel onduidelijk was.
 
Henk PHP

Henk PHP

25/04/2012 18:13:27
Quote Anchor link
Dat is verder best simpel. ipv de echo, gooi je je data in een array:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
    $data
= array();
    // voor elke tag
    foreach ($tag as $item) {


        // als style == 'text-align: center' (oftewel rechterkolom)
        if($item->getAttribute('style') == 'text-align: center')
        {

        // hier heb je je data
        // stop de data in je array (en trim alle die lelijke witte ruimte eraf)

            $data[] = trim($item->nodeValue);
        }

    }

    
    //Begin tabel
    echo '<table>';
    //simpel countertje
    $count = 1;
    
    //loop door je data heen om het weer te geven in je tabel
    foreach( $data as $scrape)
    {

        echo '<tr><td> Tekst </td>';
        echo' <td> Dit is tag nummer ' . $count . ':<br/>' . $scrape . '</td></tr>';
        $count++;
    }

    // einde tabel
    echo '</table>';
  

    ?>
Gewijzigd op 25/04/2012 18:14:25 door Henk PHP
 
Dennis Jacobs

Dennis Jacobs

25/04/2012 18:30:41
Quote Anchor link
Helemaal top, bedankt!
Alleen heb ik nu een  of â in de scrape staan, hoe filter ik deze eruit?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.