1 2 3 4 5 | appel water : 85,56 g vezel : 2,4 g energie : 218 kJ (52 kcal) suikers : 10,39 g |
- Pagina ophalen met file_get_contents() (of CURL oid, of direct met de DOM parser)quote:Op vrijdag 21 oktober 2011 18:27 schreef YazooW het volgende:
- 1 pagina die een lijst met hyperlinks bevat: appels, peren, bananen, kiwi's etc
- En dan meerdere pagina's met daarop informatie over de hyperlink waarop je geklikt hebt.
Als voorbeeld een pagina "Appels".
Pagina appels bevat de volgende inhoud:
[ code verwijderd ]
Elke "fruitpagina" zit hetzelfde in elkaar, ze bevatten de velden water, vezel, energie en suikers, alleen de waarde verschilt steeds per pagina/fruit. Nu wil ik deze data automatisch opslaan, dus dat ik niet 1 voor 1 die links moet gaan open klikken etc etc. Vervolgens alles opslaan in een tekstbestandje of automatisch naar mijn eigen database schrijven? Ik ken de mogelijkheden simpelweg niet. Ik hoop dat er hier iemand is die mij misschien een beetje op weg kan helpen.
Dus om het even te vertalen naar mijn voorbeeld.quote:Op vrijdag 21 oktober 2011 18:37 schreef mstx het volgende:
[..]
- Pagina ophalen met file_get_contents() (of CURL oid, of direct met de DOM parser)
- Inhoud parsen met een DOM parser.
- Via het DOM de <a> tags selecteren die je wilt hebben
- Door de <a> tags loopen en elke href ophalen met file_get_contents()
- Alle pagina's weer parsen met de DOM parser
- Via het DOM de tabel uitlezen en de data opslaan
En bij duizenden linkjes zou ik het niet allemaal meteen achter elkaar doen maar er een interval tussen zetten.
1 2 3 4 5 6 | $html = file_get_html($url); $ret = $html->find('dd'); foreach($ret as $all) echo $all->find('dd') . "<br>"; |
Wat staat er in de array's? Je kunt ze printen dmv print_r.quote:Op zondag 23 oktober 2011 15:32 schreef YazooW het volgende:
Zit een beetje te testen met die simplehtmldom, PHP is niet helemaal mijn ding maar begin het toch aardig te snappen. Nu wil ik de inhoud van alle dd tags extracten, de site bevat 11 dd's, en het script hieronder returnt ook 11 dd's, alleen returnt hij ze alle 11 als "Array". Wat doe ik hier fout?
[ code verwijderd ]
1 2 | foreach($ret as $all) print_r($all->find('dd')); |
Snap eerlijk gezegd niet waarom het script opeens 11x Array tevoorschijn tovert.quote:Op zondag 23 oktober 2011 16:07 schreef The_Terminator het volgende:
[..]
Wat staat er in de array's? Je kunt ze printen dmv print_r.
[ code verwijderd ]
Terwijl de inhoud van de DD's bestaat uit: Naam, Leeftijd, Lengte, etc etc.quote:Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( )
De array's zijn leeg...quote:Op zondag 23 oktober 2011 16:11 schreef YazooW het volgende:
[..]
Snap eerlijk gezegd niet waarom het script opeens 11x Array tevoorschijn tovert.
Met jou stukje code is dit nu mijn output:
[..]
Terwijl de inhoud van de DD's bestaat uit: Naam, Leeftijd, Lengte, etc etc.
1 2 3 4 5 | $html = file_get_html($url); $ret = $html->find('dd'); var_dump($ret); |
Dit is slechts een klein gedeelte van de gehele output, hij blijft maar doorgaan met dit soort code op het scherm te toveren totdat er zoveel op staat dat mijn Firefox crasht.quote:array(11) { [0]=> object(simple_html_dom_node)#1644 (9) { ["nodetype"]=> int(1) ["tag"]=> string(2) "dd" ["attr"]=> array(0) { } ["children"]=> array(0) { } ["nodes"]=> array(1) { [0]=> object(simple_html_dom_node)#1645 (9) { ["nodetype"]=> int(3) ["tag"]=> string(4) "text" ["attr"]=> array(0) { } ["children"]=> array(0) { } ["nodes"]=> array(0) { } ["parent"]=> *RECURSION* ["_"]=> array(1) { [4]=> string(4) "John" } ["tag_start"]=> int(0) ["dom":"simple_html_dom_node":private]=>
Heb je de code die ik heb gepost onder de foreach geplaatst? Dat is namelijk niet de bedoelingquote:Op zondag 23 oktober 2011 16:21 schreef YazooW het volgende:
In Chrome laadt hij een tijdje waarna Chrome vervolgens een fout geeft, geen output dus.
In Firefox:
[..]
Dit is slechts een klein gedeelte van de gehele output, hij blijft maar doorgaan met dit soort code op het scherm te toveren totdat er zoveel op staat dat mijn Firefox crasht.
1 2 3 4 | $html = file_get_html($url); foreach($html->find('dd') as $all) echo $all->innertext . '<br>'; |
Nee had die foreach vervangen door jou stukje code, niet eronder geplaatst.quote:Op zondag 23 oktober 2011 16:37 schreef The_Terminator het volgende:
[..]
Heb je de code die ik heb gepost onder de foreach geplaatst? Dat is namelijk niet de bedoeling![]()
Maargoed, probeer dit eens (als vervanging voor jouw code, niet eronder plaatsen...):
[ code verwijderd ]
1 2 3 4 5 | $html = file_get_html($url); foreach($html->find('table#page_player_1_block_player_squad_1-table td[class="name large-link"] a[href]') as $all) echo $all->getAttribute('href') . '<br>'; |
1 2 3 4 | $html = file_get_html($url); foreach($html->find('dd') as $all) echo $all->innertext . '<br>'; |
zoiets? preg_replace("/\\[faq=(\\d)+\\]/", '<a href="#\\1">FAQ #\\1</a>', $str);quote:Op zondag 23 oktober 2011 20:08 schreef wobbel het volgende:
Ik zit ook vastik ben echt een held met reguliere expressies
Ik wil [faq=3362] vervangen door <a href="#3362">FAQ #3362</a>
Er bestaat zoiets in regex als looking forward waarmee je in één patroon het volgende kan doen.quote:Op zondag 23 oktober 2011 20:08 schreef wobbel het volgende:
Ik zit ook vastik ben echt een held met reguliere expressies
Ik wil [faq=3362] vervangen door <a href="#3362">FAQ #3362</a>
1 2 3 4 5 6 7 | SELECT properties.data FROM belongs LEFT JOIN properties ON (belongs.userid = properties.userid) AND (properties.title = `name`) WHERE (belongs.groupid = `1`) |
1 2 3 4 5 | userid | groupid 1 | 1 2 | 1 3 | 1 2 | 2 |
1 2 3 4 5 | userid | title | data 1 | name | piet 2 | name | jan 1 | adres | hoofdstraat 21 3 | name | henk |
Waarschijnlijk omdat zijn properties variabel zijn. Hoe wil je dit formuleren in 1 tabel?quote:Op maandag 24 oktober 2011 08:12 schreef boem-dikkie het volgende:
Waarom gebruik je eigenlijk twee tabellen hiervoor?
quote:Op zondag 23 oktober 2011 22:54 schreef wobbel het volgende:
@GloeiMuis...ty
@Pakspul
Zou ik waarderen, iets meer info erbij zou ook niet verkeerd zijn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php $input = "tekst [faq=123] en dan nog een tekst met een andere tag [faq=123]test[/faq] tekst achteraf"; // tags [faq=123] omzetten naar [faq=123]123[/faq], met [faq=123]test[/faq] wordt niet gedaan. $temp = preg_replace('/\[faq=([^\]]+)](?![^\[]+\[\/faq\])/is', '[faq=\1]\1[/faq]', $input); // alle [faq=123]tekst[/faq] omzetten naar HTML code $output = preg_replace("#\[faq=(.*?)\](.*?)\[/faq\]#si", '<a href="#\\1">FAQ #\\2</a>', $temp); echo $input; // laat input zien echo "<hr>"; echo $temp; // laat tussen stap zien echo "<hr>"; echo htmlentities($output); // laat output zien ?> |
Per groep een tabel aanmaken en deze dynamisch met code gaan beinvloeden. Ik moest een keer zo'n oplossing maken aangezien meneer heilig overtuigd was van dat dat de beste mogelijkheid was. Wat is hij later op zijn bek gegaanquote:Op maandag 24 oktober 2011 08:36 schreef Intrepidity het volgende:
[..]
Waarschijnlijk omdat zijn properties variabel zijn. Hoe wil je dit formuleren in 1 tabel?
Het ruikt hier overigens naar NoSQL, maar ik neem gemakshalve maar even aan dat dat geen optie is.
Bij een inner join maakt het niet uit of je iets in de ON of in de WHERE-clause zet.quote:Op maandag 24 oktober 2011 02:14 schreef KomtTijd... het volgende:
-edit- kan hier natuurlijk een inner join gebruiken, ik hoef geen leeg record terug als een naam ontbreekt (wat theoretisch zelfs onmogelijk is maar je weet maar nooit).
Maar aan de query verandert dat verder niets toch?
Hoe zie je dat voor jequote:Op maandag 24 oktober 2011 08:12 schreef boem-dikkie het volgende:
Waarom gebruik je eigenlijk twee tabellen hiervoor?
Ik heb keuze uit MySQL of MySQL dus nee idd, maar NoSQL is toch juist voor als je heul geen moeilijke joins enzo nodig hebt?quote:Op maandag 24 oktober 2011 08:36 schreef Intrepidity het volgende:
[..]
Waarschijnlijk omdat zijn properties variabel zijn. Hoe wil je dit formuleren in 1 tabel?
Het ruikt hier overigens naar NoSQL, maar ik neem gemakshalve maar even aan dat dat geen optie is.
Kijk da's dan wel weer handig.quote:Op maandag 24 oktober 2011 10:50 schreef GlowMouse het volgende:
[..]
Bij een inner join maakt het niet uit of je iets in de ON of in de WHERE-clause zet.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |