Crawler probleem, prijs ophalen webshop error

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Chris Broekz

Chris Broekz

06/08/2012 16:39:30
Quote Anchor link
Ik ben bezig met het maken van een crawler om de prijs op te halen van een product van een webshop en deze in een MySQL database te plaatsen.

Alleen kom ik nu niet meer verder.

Mijn code:
Quote:
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
    ini_set('display_errors',1);
    error_reporting(E_ALL);

    if(!$fp = fopen("http://www.josdijkman.nl/shop/index.php?act=viewProd&productId=7737" ,"r" )) {
        return false;
    }

    $content = "";

    while(!feof($fp)) {
        $content .= fgets($fp, 1024);
    }

    
    preg_match_all("/([$][0-9]*[,]*[.][0-9]{2})/", $content, $prices, PREG_SET_ORDER);
    echo $prices[0][0]."<br />";
    
    fclose($fp);
?>



Met preq_match_all probeer ik de prijs eruit te halen. Ik weet niet precies hoe het werkt heb even gekeken op http://php.net/manual/en/function.preg-match-all.php maar zie niet wat ik fout doe.

Ik krijg deze error:
Quote:
Notice: Undefined offset: 0 in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\crawler.php on line 15


Dus een probleem met de array?

Is er een andere methode om de data die ik wil, dus alleen de prijs uit de pagina te sorteren en deze dan declareren.

Dit is de $content:
http://img266.imageshack.us/img266/219/crawlerg.png

Gewoon een hele pagina zonder css, images enz.


Alvast bedankt!
 
PHP hulp

PHP hulp

16/04/2024 07:01:57
 
Ivo Breeden

Ivo Breeden

06/08/2012 21:13:55
Quote Anchor link
Chris,
In de eerste plaats toont de handleiding die je zelf gevonden had welke mogelijke return-statussen preg_match_all() kan hebben. Test daarom op te mogelijkheden false (fout opgetreden) of 0 (geen resultaten gevonden). (Ik heb het geprobeerd en het laatste blijkt het geval te zijn.)

In de tweede plaats heb je de regular expression kennelijk van een Amerikaanse website gehaald, want die zoekt bedragen die met een "$" beginnen:
"[$][0-9]*[,]*[.][0-9]{2}"
Dat betekent: een "$" gevolgd door een cijfer dat 0 of meer keer voorkomt (*) gevolgd door een komma die 0 of meer keer voorkomt (*) (dat lijkt me niet juist) gevolgd door een punt, gevolgd door twee cijfers.
Als ik die ombouw naar "€[0-9]*\.[0-9]{2})" (wat het volgens mij zou moeten zijn) dan levert dat nog niets op. Ik denk dat dit te maken heeft met het verveldende Euro teken, dat op verschillende manieren gecodeerd kan zijn.
Daarom zoek ik in het volgende voorbeeld op 1 of meer cijfers, gevolgd door een punt of een komma en dan twee cijfers. Dat werkt.
Quote:
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
<?php
    ini_set('display_errors',1);
    error_reporting(E_ALL);

    if(!$fp = fopen("http://www.josdijkman.nl/shop/index.php?act=viewProd&productId=7737" ,"r" )) {
        return false;
    }
  
    $content = "";

    while(!feof($fp)) {
        $content .= fgets($fp, 1024);
    }
  
    fclose($fp);
        
    $status = preg_match_all("/([0-9]+[.,][0-9]{2})/", $content, $prices, PREG_SET_ORDER);
    if ($status === false ) {
      echo "Er is een fout opgetreden\n";
    }
elseif ($status == 0) {
      echo "Er zijn geen resultaten\n";
    }
else {
      echo '<pre>';
      print_r($prices);
      echo '</pre>';
    }
  
?>
 
Chris Broekz

Chris Broekz

06/08/2012 21:53:51
Quote Anchor link
Bedankt! Klopt helemaal.

Mijn probleem is hierbij opgelost.
 



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.