[PHP] gegevens rippen

Pagina: 1
Acties:
  • 107 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Rrrr
  • Registratie: Oktober 2002
  • Laatst online: 02-06 13:01
Ik ben al enige tijd bezig met een website en wil graag de wedstrijdgegevens van de nevobosite halen. Ik heb momenteel deze code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$url = 'http://zoekmachine.nevobo.nl/noord-oost/ws_list2.php3?verid=1146&tp=HS&nr=1';
$handle = fopen($url, "r");
$contents = fread($handle, 1024);

while (!feof($handle))  {  
                                $contents .= fread($handle, 8192);
                               }

fclose($handle);

$contents = strip_tags($contents, '<HEAD><TABLE><TR><TD><p>');
$contents = str_replace("<TABLE>", "", $contents);
$contents = str_replace("<TR>", "", $contents);
$contents = substr($contents,120,10000);
print"$contents";


Nu krijg ik het wel 'mooi' op scherm, maar ik zou het graag zien zonder al die tekst om de tabel heen. Nu ben ik bezig geweest om met 'str_replace' alle tekst te vervangen door "", maar dit lijkt me niet helemaal de juiste oplossing.

Want ten tweede, moet deze code het ook doen voor andere teams. Sommige teams spelen minder wedstrijden en om daar nu een apart code voor te schrijven :?

Heeft iemand een idee hoe ik het ook kan aanpakken?

Acties:
  • 0 Henk 'm!

Anoniem: 179114

Een snelle en makkelijke manier is het volgende. Maar niet echt betrouwbaar, een wijziging in hun pagina en het script werkt al niet meer.

Je kan eerst een explode() doen op een stuk HTML code waarmee de tabel begint. Dan ben je alle tekst voor die tabel al kwijt.
PHP:
1
2
$var = explode ("<table border=1 cellpadding=2 cellspacing=1>", $contents);
$contents = $var[1];

Hetzelfde kun je voor een stuk HTML code doen waarmee de tabel eindigd.
PHP:
1
2
$var = explode ("<a name="status"></a>", $contents);
$contents = $var[0];


Nu houdt je alleen de tabel met uitslag info over.

Acties:
  • 0 Henk 'm!

  • remcotolsma
  • Registratie: December 2005
  • Laatst online: 28-11-2024
Op deze manier hou je ook alleen de tabel over... ik kan niet zeggen of het voor alle pagina's correct zal werken...

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$url = 'http://zoekmachine.nevobo.nl/noord-oost/ws_list2.php3?verid=1146&tp=HS&nr=1';
$handle = fopen($url, "r");
$contents = fread($handle, 1024);

while(!feof($handle))
{  
  $contents .= fread($handle, 8192);
}

fclose($handle);

$contents = substr($contents, strpos($contents, '<table border=1 cellpadding=2 cellspacing=1>'));
$contents = substr($contents, 0, strpos($contents, '</table>') + 8);
print $contents;

Acties:
  • 0 Henk 'm!

  • Pyrus
  • Registratie: November 2001
  • Laatst online: 22:54

Pyrus

Hardknock life

of met een regex...
PHP:
1
preg_match_all("/<table border=1 cellpadding=2 cellspacing=1>(<tr>.*<\/tr>)<\/table>/", $contents, $matches);


of iets in die richting, krijg je in je $matches[1] alle rijen, moet je daarna die ff afwerken et presto :)

@hier boven met substr, dat gaat niet werken. Er staan meerdere tables in de source.

Misschien dat je de < en > nog ff moet escapen, maar dacht het niet. Laaaang geleden dat ik serieus wat met regexes gedaan heb

[ Voor 23% gewijzigd door Pyrus op 15-06-2006 11:29 ]

LinkedIn


Acties:
  • 0 Henk 'm!

  • Rrrr
  • Registratie: Oktober 2002
  • Laatst online: 02-06 13:01
wow, wat een reacties.

Ga gelijk proberen, alvast bedankt :)

Acties:
  • 0 Henk 'm!

  • remcotolsma
  • Registratie: December 2005
  • Laatst online: 28-11-2024
@hier boven met substr, dat gaat niet werken. Er staan meerdere tables in de source.
Het werkt anders wel (met de URL die TS in zijn voorbeeld gaf iig)... er wordt gewoon gezocht naar de eerst tabel afaik... en dat is toevallig de tabel waar het omgaat...

[ Voor 7% gewijzigd door remcotolsma op 15-06-2006 12:11 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

remcotolsma schreef op donderdag 15 juni 2006 @ 12:11:
Het werkt anders wel (met de URL die TS in zijn voorbeeld gaf iig)... er wordt gewoon gezocht naar de eerst tabel afaik... en dat is toevallig de tabel waar het omgaat...
Klopt inderdaad. Beide oplossingen zouden moeten werken, al vind ik persoonlijk regexps een stukje eleganter. :)

Al moeten er in de oplossing van Pyrus hierboven nog wat dingen gewijzigd worden. Er missen bijvoorbeeld delimiters en modifiers die er wel in horen. Zie onze regexp FAQ. ;)

[ Voor 20% gewijzigd door NMe op 15-06-2006 12:26 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • RicX
  • Registratie: September 2003
  • Laatst online: 19-05 11:24

RicX

Het leven is geen ponypark

Wat je ook kunt doen is met file_get_contents alles ophalen. Alles wordt dan ook in een string gepompt en die kun je daarna met preg_match_all (van Pyrus) parsen...
Ik zou je wel kunnen aanraden om file_get_contents te gebruiken... omdat ik bij iets soortgelijks met fopen soms foutmeldingen kreeg...

PHP:
1
2
$url = 'http://zoekmachine.nevobo.nl/noord-oost/ws_list2.php3?verid=1146&tp=HS&nr=1';
$searchResult = file_get_contents($url);


Check wel dit op de site:
Het is uitsluitend met bronvermelding toegestaan deze informatie zonder schriftelijke toestemming te gebruiken, te vermenigvuldigen of op welke wijze dan ook aan derden ter beschikking te stellen.
Maak dus nog even een linkje naar hun site erbij...

Honesty is the best policy, but insanity is a better defense


Acties:
  • 0 Henk 'm!

  • Javache
  • Registratie: Mei 2006
  • Laatst online: 13-02-2010
Wat je kunt ook doen (in PHP5) is het DOM-object model gebruiken.Google it

Acties:
  • 0 Henk 'm!

Anoniem: 14829

Misschien wat al te simpel gedacht, maar is deze URL niet een stuk handiger te parsen?

http://zoekmachine.nevobo...46&tp=HS&nr=1&txt=1&tc=51

Gewoon even in de source van de voorbeeld URL gezocht op "platte tekst". :)

Acties:
  • 0 Henk 'm!

  • Rrrr
  • Registratie: Oktober 2002
  • Laatst online: 02-06 13:01
Anoniem: 14829 schreef op donderdag 15 juni 2006 @ 21:18:
Misschien wat al te simpel gedacht, maar is deze URL niet een stuk handiger te parsen?

http://zoekmachine.nevobo...46&tp=HS&nr=1&txt=1&tc=51

Gewoon even in de source van de voorbeeld URL gezocht op "platte tekst". :)
Ik zet alle links in een db en die link (het einde ervan, tc=..) veranderd om de zoveel tijd.

Ik heb het momenteel gedaan met remcotolsma zijn idee en dat werkt tot nu toe nog steeds prima _/-\o_

Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 28-07-2022

djc

Javache schreef op donderdag 15 juni 2006 @ 20:55:
Wat je kunt ook doen (in PHP5) is het DOM-object model gebruiken.Google it
Trekt die interface zulke brakke HTML?

Rustacean


Acties:
  • 0 Henk 'm!

  • Javache
  • Registratie: Mei 2006
  • Laatst online: 13-02-2010
Manuzhai schreef op vrijdag 16 juni 2006 @ 12:11:
[...]
Trekt die interface zulke brakke HTML?
Nouja, je kan misschien wel wat foutmeldingen krijgen bij het inlezen maar over het algemeen bevat zelf rotte HTML iets van structuur.... (en tables lukt zeker, dunkt me)

Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 12-06 18:55

Gerco

Professional Newbie

Ik heb ooit zoiets gemaakt om de paginas van de Gouden Gids te rippen en dat werkte als volgt:

- HTML downloaden
- Met HTMLTidy omzetten naar valide XML
- Met een XSLT sheet omzetten naar een XML formaat wat ik verder kon gebruiken
- Vervolgens nog een XSLT sheet om de XML om te zetten naar het uiteindelijke doelformaat

De laatste twee stappen kun je natuurlijk in 1 sheet doen, maar omdat het formaat van de pagina nog weleens wil veranderen, is het handiger om het in twee te doen, vind ik.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!

Pagina: 1