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:
Herhangi bir fikir bu konuda gitmek için?