Frage

Ich versuche, eine einfache Alarm -App für einige Freunde zu erstellen.

Grundsätzlich möchte ich in der Lage sein, Daten "Preis" und "Aktienverfügbarkeit" aus einer Webseite wie den zweisten zwei zu extrahieren:

Ich habe die Warnung per E-Mail und SMS-Teil gemacht, aber jetzt möchte ich in der Lage sein, die Menge und den Preis aus den Webseiten (diese 2 oder alle anderen) herauszuholen, damit ich den verfügbaren Preis und die verfügbare Menge vergleichen und uns alarmieren kann eine Bestellung machen, wenn sich ein Produkt zwischen einigen Schwellenwerten befindet.

Ich habe einige Regex ausprobiert (fand in einigen Tutorials, aber ich habe ein viel zu N00B dafür), aber es hat nicht geschafft, diese Funktionen zu bekommen, gute Tipps oder Beispiele?

War es hilfreich?

Lösung

$content = file_get_contents('http://www.sparkfun.com/commerce/product_info.php?products_id=9279');

preg_match('#<tr><th>(.*)</th> <td><b>price</b></td></tr>#', $content, $match);
$price = $match[1];

preg_match('#<input type="hidden" name="quantity_on_hand" value="(.*?)">#', $content, $match);
$in_stock = $match[1];

echo "Price: $price - Availability: $in_stock\n";

Andere Tipps

Es heißt Screen Scraping, falls Sie dafür googeln müssen.

Ich würde vorschlagen, dass Sie stattdessen einen DOM -Parser- und XPath -Ausdruck verwenden. Füttern Sie das HTML zuerst durch HTMLTIDY, um sicherzustellen, dass es sich um ein gültiges Markup handelt.

Zum Beispiel:

$html = file_get_contents("http://www.example.com");
$html = tidy_repair_string($html);
$doc = new DomDocument();
$doc->loadHtml($html);
$xpath = new DomXPath($doc);
// Now query the document:
foreach ($xpath->query('//table[@class="pricing"]/th') as $node) {
  echo $node, "\n";
}

Was auch immer Sie tun: Verwenden Sie keine regulären Ausdrücke, um HTML oder zu analysieren oder Schlechte Dinge werden passieren. Verwenden ein Parser stattdessen.

Wenn Sie sich diese Frage stellen, geht es auch zu Details. 2. Das Extrahieren von Daten von einer Website ist möglicherweise nicht legitim. Ich habe jedoch Hinweise:

  1. Verwenden Sie Firebug oder Chrome/Safari Inspector, um den HTML -Inhalt und das Muster interessanter Informationen zu untersuchen

  2. Testen Sie Ihre Regex, um festzustellen, ob das Übereinstimmung ist. Möglicherweise müssen Sie es viele Male tun (Multi-Pass-Parsing/Extraktion)

  3. Schreiben Sie einen Client über Curl oder noch viel einfacher, verwenden Sie File_Get_Contents (Beachten Sie, dass einige Hosting das Laden von URLs mit File_Get_Contents deaktivieren).

Für mich verwenden ich Tidy besser, um in gültige XHTML zu konvertieren und dann mit XPath Daten anstelle von Regex zu extrahieren. Wieso den? Weil XHTML nicht regelmäßig ist und XPath sehr flexibel ist. Sie können XSLT lernen, um zu transformieren.

Viel Glück!

Sie laden wahrscheinlich am besten den HTML -Code in einen DOM -Parser wie Dieses hier und nach der "Preisgestaltung" -Tabelle. Jede Art von Kratzern, die Sie abkratzen, kann jedoch brechen, wenn sie ihr Seitenlayout ändern, und ist wahrscheinlich ohne ihre Zustimmung illegal.

Der beste Weg wäre jedoch, mit den Personen zu sprechen, die die Website betreiben, und zu prüfen, ob sie alternative, zuverlässigere Formen der Datenbereitstellung haben (Webdienste, RSS oder Datenbankexporte in den Sinn).

Die einfachste Methode zum Extrahieren von Daten von der Website. Ich habe analysiert, dass meine Alle Daten nur innerhalb von Tag behandelt werden, also habe ich diesen vorbereitet.

<?php
    include(‘simple_html_dom.php’);
        // Create DOM from URL, paste your destined web url in $page 
        $page = ‘http://facebook4free.com/category/facebookstatus/amazing-facebook-status/’;
        $html = new simple_html_dom();

       //Within $html your webpage will be loaded for further operation
        $html->load_file($page);

        // Find all links
        $links = array();
        //Within find() function, I have written h3 so it will simply fetch the content from <h3> tag only. Change as per your requirement.
       foreach($html->find(‘h3′) as $element) 
        {
            $links[] = $element;
        }
        reset($links);
        //$out will be having each of HTML element content you searching for, within that web page
        foreach ($links as $out) 
        {
            echo $out;
        }                

?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top