Список товаров с сайта электронной коммерции

Я работаю над сценарием в php, который берет все URL-адреса продуктов с сайта электронной коммерции, сейчас я просто использую функцию get_file_contents () и после поиска ключевого слова с помощью preg_match_all (), который ожидает элемент url, теперь мой вопрос: могу ли я использовать более прямой и эффективный способ хранить все эти ссылки с веб-сайта и помещать их в мою базу данных?

0

Решение

Я недавно создал систему сканирования для проекта моего клиента. В основном это шаги, которые я следовал:

  1. Проект был основан на PHP, и он поддерживает несколько типов документов, таких как XML, JSON и HTML.
  2. Я создал объект базового продукта с нужными мне свойствами (заголовок, изображение, цена, ссылка, категория, исходный сайт)
  3. Для каждого веб-сайта я использую парсер, который обычно использует библиотеку PhpDom с DomXpath.
  4. По сути, я нахожу тег списка товаров, перебираю записи и создаю новый объект списка товаров с объектом товаров внутри (шаг 2).
  5. Когда синтаксический анализ веб-сайта завершается, я отправляю весь список моему базовому действию, и он проверяет, существует ли уже продукт с таким URL, если нет, то он добавляет в базу данных.
  6. Также на моем сервере я запускаю cron, где он проверяет все ссылки на продукты, и если ответ возвращает 404 или 500, он добавляет флаг для продукта с 1. Я также запускаю другой cron, который снова проверяет ссылки с помощью флаг 1. Если он все еще отвечает кодом ошибки, он удаляет содержимое из моей базы данных.

Это пример кода парсера, который я использую. Я надеюсь, что это поможет вам в этом процессе:

$content = file_get_contents($url);
libxml_use_internal_errors(true);
$oDom = new DomDocument;
$oDom->validateOnParse = false;
$res = $oDom->loadHTML($content);
libxml_clear_errors();
$oDom->preserveWhiteSpace = false;
$oXpath = new DOMXPath($oDom);
$productNode = $oXpath->query('//div[@class="ulist span4"]');
if($productNode){
$productsList = array();
foreach($productNode as $p){
$this->oProduct = new Products();

$productURL = $oXpath->query('div[@class="ures"]/div[@class="ures-cell"]/a', $p)->item(0);
$this->oProduct->url = $this->base.'/'.$productURL->getAttribute('href');
$this->oProduct->category = $categoryID;
$this->oProduct->productPeek = $peek;
$titleNode = $oXpath->query('div[@class="ubilgialan span12"]/div[@class="span12 uadi"]/a/span', $p)->item(0);
$this->oProduct->title = trim($titleNode->nodeValue);
$priceNode = $oXpath->query('div[@class="ubilgialan span12"]/div[@class="span8 ufytalan"]/div[@class="ufyt"]/span[@class="divdiscountprice"]/span', $p)->item(0);
$this->oProduct->price = trim($priceNode->nodeValue);
$imageNode = $oXpath->query('div[@class="ures"]/div[@class="ures-cell"]/a/img', $p)->item(0);
$this->oProduct->image = $this->base."/".$imageNode->getAttribute('src');
$productsList[] = $this->oProduct;
}

if(count($productsList) > 0){
return $productsList;
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]