Question

Je suis en train de créer une application simple alerte pour quelques amis.

Fondamentalement, je veux être en mesure d'extraire des données « prix » et « stocks disponibles » à partir d'une page Web comme les deux folowing:

Je l'ai fait l'alerte par e-mail et une partie de sms, mais maintenant je veux être en mesure d'obtenir la quantité et le prix sur les pages Web (les 2 ou les autres) afin que je puisse comparer le prix et la quantité disponible et nous avertir de rendre une ordonnance si un produit est entre certains seuils.

Je l'ai essayé quelques-uns regex (trouvé sur quelques tutoriels, mais je une trop n00b pour cela) mais n'ont pas réussi à obtenir ce travail, de bons conseils ou des exemples?

Était-ce utile?

La solution

$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";

Autres conseils

Il est appelé screen scraping, dans le cas où vous avez besoin de Google pour cela.

Je suggère que vous utilisez un analyseur dom et des expressions XPath à la place. Faire passer le HTML par HTMLTidy d'abord, pour faire en sorte que son balisage valide.

Par exemple:

$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";
}

Qu'est-ce que vous fassiez: Ne pas utiliser des expressions régulières pour analyser HTML ou mauvaises choses se passera-t . Utilisez un analyseur à la place.

1er, poser cette question va trop dans les détails. 2, l'extraction de données à partir d'un site Web pourrait ne pas être légitime. Cependant, j'ai des notes:

  1. Utilisez Firebug ou Chrome / Safari Inspecteur d'explorer le contenu HTML et le modèle d'informations intéressantes

  2. Testez votre RegEx pour voir si le match. Vous devrez peut-être faire plusieurs fois (multi-passes parsing / extraction)

  3. Ecrire un client via cURL ou même beaucoup plus simple, utilisez file_get_contents (Notez que certains hébergement désactiver les URL de chargement avec file_get_contents)

Pour moi, je ferais mieux d'utiliser Tidy pour convertir en XHTML et ensuite utiliser XPath pour extraire des données, au lieu de RegEx. Pourquoi? Parce que XHTML n'est pas régulière et XPath est très flexible. Vous pouvez en apprendre XSLT transformer.

Bonne chance!

Vous êtes probablement mieux loti charger le code HTML dans un analyseur DOM comme celui et la recherche de la table « prix ». Cependant, tout type de grattage que vous faites peut briser chaque fois qu'ils changent leur mise en page, et est probablement illégale sans leur consentement.

La meilleure façon, cependant, serait de parler aux gens qui gèrent le site, et voir si elles sont alternatives, des formes plus fiables de fourniture de données (services Web, RSS ou exportation de base de données viennent à l'esprit).

La méthode la plus simple pour extraire des données du site Web. Je l'ai analysé que mes toutes les données sont couverts par étiquette uniquement, donc je l'ai préparé celui-ci.

<?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;
        }                

?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top