سؤال

أحاول إنشاء تطبيق تنبيه بسيط لبعض الأصدقاء.

في الأساس أريد أن أكون قادرا على استخراج البيانات "السعر" و "توفر الأسهم" من صفحة ويب مثل المرسل الثاني:

لقد قمت بالتنبيه عبر البريد الإلكتروني والرسائل النصية القصيرة، لكنني الآن أريد أن أكون قادرا على الحصول على الكمية والسعر من صفحات الويب (تلك 2 أو أي منها آخر) حتى أتمكن من مقارنة السعر والكمية المتاحة وتنبيهنا لتقديم طلب إذا كان المنتج بين بعض العتبات.

لقد جربت بعض Regex (وجدت على بعض البرامج التعليمية، لكنني طريقة N00B أيضا لهذا) ولكن لم تتمكن من الحصول على هذا العمل أو أي نصائح جيدة أو أمثلة؟

هل كانت مفيدة؟

المحلول

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

نصائح أخرى

يطلق عليه الشاشة كشط، في حال كنت بحاجة إلى Google لذلك.

أود أن أقترح عليك استخدام تعبيرات DOM Parser و XPath بدلا من ذلك. إطعام HTML من خلال HTMLTIDY أولا، للتأكد من أنه تمييز صالح.

علي سبيل المثال:

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

ما الذي تقوم به على الإطلاق: لا تستخدم تعبيرات منتظمة لتحليل HTML أو أشياء سيئة سيحدث. وبعد إستخدم محلل في حين أن.

1st، طرح هذا السؤال يذهب إلى التفاصيل أيضا. 2ND، قد لا يكون استخراج البيانات من موقع ويب مشروعا. ومع ذلك، لدي تلميحات:

  1. استخدم Firebug أو Chrome / Safari Inspector لاستكشاف محتوى HTML ونمط معلومات مثيرة للاهتمام

  2. اختبار Regex الخاص بك لمعرفة ما إذا كانت المباراة. قد تحتاج إلى القيام بذلك عدة مرات (تحليل / استخراج متعددة)

  3. اكتب عميل عبر حليقة أو أكثر بساطة أكثر بساطة، استخدم file_get_contents (لاحظ أن بعض استضافة عناوين URL لتحميل عناوين URL مع file_get_contents)

بالنسبة لي، كنت أفضل استخدام مرتبة للتحويل إلى XHTML ساري المفعول ثم استخدم XPath لاستخراج البيانات، بدلا من Regex. لماذا ا؟ لأن XHTML غير منتظم و XPath مرن للغاية. يمكنك تعلم XSLT لتحويل.

حظا طيبا وفقك الله!

ربما تكون أفضل قبالة تحميل كود HTML في محلل دوم مثل هذا والبحث عن جدول "التسعير". ومع ذلك، يمكن لأي نوع من التشطيبات التي تقوم بها عند تغيير تخطيط صفحاتها، وربما غير قانوني دون موافقتها.

أفضل طريقة، على الرغم من أن التحدث إلى الأشخاص الذين يديرون الموقع، ومعرفة ما إذا كانوا لديهم أشكال بديلة وأكثر موثوقية لتسليم البيانات (خدمات الويب أو RSS أو صادرات قاعدة البيانات تتبادر إلى الذهن).

أبسط طريقة لاستخراج البيانات من موقع الويب. لقد قمت بتحليل أن بياناتي مغطاة في العلامة فقط، لذلك قمت بإعداد هذا واحد.

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

?>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top