Automatische data in een tabel
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.
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.
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?
SimpleHTMLDom
Library: Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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>';
?>
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
Zie hieronder voor een simpel voorbeeldje met toelichting.
Op mijn machine werkt dit.
Code (php)
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
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;
}
}
?>
// 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
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
Wat is nu je code? Wat wil je bereiken?
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.
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
Code (php)
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
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;
}
}
?>
// 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.
Code (php)
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
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>';
?>
$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
Alleen heb ik nu een  of â in de scrape staan, hoe filter ik deze eruit?