PHP kullanarak bir HTML sayfası ayrıştırmak nasıl?

0 Cevap php

PHP kullanarak bilgi almak için HTML / JS kodlarını ayrıştırma.

www.asos.com/Asos/Little-Asos-Union-Jack-T-Shirt/Prod/pgeproduct.aspx?iid=1273626

Bu sayfada bir göz atın, bu çocuklar için bir giyim mağazası bulunuyor. Bu onların öğelerden biridir ve ben boyutu bölümünü işaret etmek istiyorum. Bizim burada yapmamız gereken, bu öğe için tüm boyutları almak ve boyutlarda mevcuttur olup olmadığını kontrol etmektir. Şu anda bu öğeler için tüm boyutları şunlardır:

3-4 years
4-5 years
5-6 years
7-8 years

Boyutları mevcut olmadığını nasıl söyleyebiliriz?

Şimdi öncelikle bu sayfasına bir göz atın ve boyutlarını tekrar kontrol edin:

www.asos.com/Ralph-Lauren/Ralph-Lauren-Long-Sleeve-Big-Horse-Stripe-Rugby-Top/Prod/pgeproduct.aspx?iid=1111751

Bu madde aşağıdaki boyutları vardır:

12 months
18 months - Not Available
24 months

Eğer 18 ay boy mevcut değil gördüğünüz gibi, bu boyutun yanında "Not Available" metinle belirtilir.

Yapmamız gereken, bir öğenin sayfasına gitmek boyutlarını almak ve her ölçekteki durumunu kontrol etmektir. PHP bunu nasıl yapabilirim?

EDIT:

Bir çalışma kodu ve mücadele için yeni bir sorun eklendi.

Kod çalışıyor ama daha fazla çalışma ihtiyacı:

<?php

function getProductVariations($url) {

  //Use CURL to get the raw HTML for the page
  $ch = curl_init();
  curl_setopt_array($ch,
    array(
      CURLOPT_RETURNTRANSFER=>true,
      CURLOPT_HEADER => false,
      CURLOPT_URL => $url
    )
  );
  $raw_html = curl_exec($ch);

  //If we get an invalid response back from the server fail
  if ($raw_html===false) {
    throw new Exception(curl_error($ch));
  }

  curl_close($ch);

  //Find the variation JS declarations and extract them
  $raw_variations = preg_match_all("/arrSzeCol_ctl00_ContentMainPage_ctlSeparateProduct\[[0-9]+\].*Array\((.*)\);/",$raw_html,$raw_matches);

  //We are done with the Raw HTML now
  unset($raw_html);

  //Check that we got some results back
  if (is_array($raw_matches) && isset($raw_matches[1]) && sizeof($raw_matches[1])==$raw_variations && $raw_variations>0) {

    //This is where the matches will go
    $matches = array();

    //Go through the results of the bracketed expression and convert them to a PHP assoc array
    foreach($raw_matches[1] as $match) {

      //As they are declared in javascript we can use json_decode to process them nicely, they just need wrapping
      $proc=json_decode("[$match]");

      //Label the fields as best we can
      $proc2=array(
        "variation_id"=>$proc[0],
        "size_desc"=>$proc[1],
        "colour_desc"=>$proc[2],
        "available"=>(trim(strtolower($proc[3]))=="true"),
        "unknown_col1"=>$proc[4],
        "price"=>$proc[5],
        "unknown_col2"=>$proc[6],       /*Always seems to be zero*/
        "currency"=>$proc[7],
        "unknown_col3"=>$proc[8],
        "unknown_col4"=>$proc[9],       /*Negative price*/
        "unknown_col5"=>$proc[10],      /*Always seems to be zero*/
        "unknown_col6"=>$proc[11]       /*Always seems to be zero*/
      );

      //Push the processed variation onto the results array
      $matches[$proc[0]]=$proc2;

      //We are done with our proc2 array now (proc will be unset by the foreach loop)
      unset($proc2);
    }

    //Return the matches we have found
    return $matches;

  } else {
    throw new Exception("Unable to find any product variations");

  }
}


//EXAMPLE USAGE
try {
  $variations = getProductVariations("http://www.asos.com/Asos/Prod/pgeproduct.aspx?iid=803846");

  //Do something more useful here
  print_r($variations);


} catch(Exception $e) {
  echo "Error: " . $e->getMessage();
}

?>

Yukarıdaki kod çalışır, ancak ürün boyutları gösterilir ilk önce bir renk seçmek için size ihtiyaç duyduğunda bir sorun var.

Bu gibi:

http://www.asos.com/Little-Joules/Little-Joules-Stewart-Venus-Fly-Trap-T-Shirt/Prod/pgeproduct.aspx?iid=1171006

Herhangi bir fikir bu konuda gitmek için?

0 Cevap