2014-09-05 3 views
0

Я соскоб данные SamsClub.com с помощью PHPскоблить детали продукта от samsclub.com

$res = file_get_contents('http://www.samsclub.com/sams/bath-towel-apple-gr-100-cotton/prod10450797.ip'); 

У меня есть создать функцию с помощью PHP взрываются для извлечения данных.

function getData($content,$start,$end){ 
    $str = explode($start,$content); 
    $str = explode($end,$str[1]); 
    return $str[0]; 
} 

Все необходимые данные получены успешно, но остается только одно. Это вариации продукта означают другие цвета, как вы можете видеть в снимке, есть разные цвета.

enter image description here

Когда мы выбираем другой цвет пункт # & Модель # продукта также изменен, как показано в следующем Сделать снимок

enter image description here

Я просто хочу также получать информацию как " товар # & модель # "других цветов тоже.

Ждут ваших замечательных ответов.

+1

Эй, помог ли мой ответ? Мне понадобилось два часа xD Вы ожидали чего-то другого? –

+0

@GiacomoTecyaPigani Мне нужно больше, я хочу также сохранить всю информацию в базе данных, а также получить название продукта. Не могли бы вы помочь мне в этом. У меня нет опыта работы с «simple_html_dom» –

+1

Хорошо, я помогу вам захватить название продукта, это очень просто ... но для части базы данных вам нужно будет сделать это самостоятельно. Я обновлю свой ответ сегодня –

ответ

2

Для этого вам понадобится библиотека (PHP Simple HTML DOM Parser). Просто загрузите файл simple_html_dom.php где-нибудь, если вы можете его включить (в моем коде он находится в одной папке).

<?php 

$url = 'http://www.samsclub.com/sams/bath-towel-apple-gr-100-cotton/prod10450797.ip'; 

include('simple_html_dom.php'); 

$html = file_get_html($url); 
$colour = array(); $item = array(); $model = array(); 
$script = $html->find('div[id=variance] script', 0)->innertext; 
$script = preg_replace('/\s+/', ' ', $script); 
$scripts = explode (";", $script); 

$script = $scripts[2]; 
$id = $scripts[4]; 
$type = $scripts[5]; 

$script = str_replace("skuJson.skuVariantJson = $.parseJSON('", "", $script); 
$script = str_replace("')", "", $script); 

$colours = json_decode($script); 

preg_match("/'([a-z0-9]*)'/", $type, $types); $type = $types[1]; 
preg_match("/'([a-z0-9]*)'/", $id, $ids);  $id = $ids[1]; 

$script = $html->find('script', -1)->innertext; 
$scripts = explode (";", $script); 

$time = $scripts[0]; 
preg_match('/"([0-9]*)"/', $time, $times); $time = $times[1]; 

foreach ($colours as $key => $value) { 
    $url = 'http://www.samsclub.com/sams/shop/product/ajax/ajaxSkuVariant.jsp?skuId='. $value .'&productId='. $id .'&productType='. $type .'&_='. $time; 
    $html = file_get_html($url); 
    preg_match('/"legacyItemNumber":"([0-9]*)"/', $html, $match); $item[] = $match[1]; 
    preg_match('/"model":"([a-z-]*)"/i', $html, $match); $model[] = $match[1]; 
    $colour[] = substr($key, 0, -1); 
} 

//Print results 
echo "<pre>"; print_r($colour); echo "</pre>"; 
echo "<pre>"; print_r($item); echo "</pre>"; 
echo "<pre>"; print_r($model); echo "</pre>"; 

?> 

Единственное, что вам нужно изменить, это переменная $ url в начале. Почему весь этот код вы можете спросить ... потому что данные, которые вы ищете, находятся не на одной странице, и вызывается через ajax каждый раз, когда вы нажимаете на цвет, поэтому в основном мы делаем много запросов (один для каждый цвет). Это результат:

Array 
(
    [0] => White 
    [1] => Burgundy 
    [2] => Apple Green 
    [3] => Lilac 
    [4] => Chocolate 
    [5] => Sage 
    [6] => Grey 
    [7] => PckBlue 
    [8] => Linen 
    [9] => null 
    [10] => Plum 
    [11] => Clay 
    [12] => Light Blue 
) 

Array 
(
    [0] => 252368 
    [1] => 252505 
    [2] => 252414 
    [3] => 433076 
    [4] => 252389 
    [5] => 117268 
    [6] => 252438 
    [7] => 613317 
    [8] => 252382 
    [9] => 433083 
    [10] => 252541 
    [11] => 117175 
    [12] => 252400 
) 

Array 
(
    [0] => SAMW-B 
    [1] => SAMB-B 
    [2] => SAMA-B 
    [3] => SAMLC-B 
    [4] => SAMCH-B 
    [5] => SAMSS-B 
    [6] => SAMGR-B 
    [7] => SAMPB-B 
    [8] => SAMLI-B 
    [9] => SAMDR-B 
    [10] => SAMP-B 
    [11] => SAMTC-B 
    [12] => SAMLB-B 
) 
-1

Я бы рекомендовал соскабливание с использованием .NET и браузера. Таким образом вы можете сделать щелчок бота на каждом цвете, а затем захватить требуемое значение.

+0

Спасибо @mariobgr Но я хочу это на PHP, и мне также нужно запустить его на сервере Apache на базе Linux. –

Смежные вопросы