Автоматический парсинг в MYSQL-базу (обновление цен товаров, добавление записей и многое другое)

Данный метод может использоваться как для добавления новых записей в MySQL-базу (добавление товаров в интернет-магазин, добавление статей и прочее), так и для обновления уже существующих записей базы (обновление цен товаров и других данных) в автоматическом режиме в процессе парсинга контента.

Примечание: Примеры кода на этой странице сделаны для версии PHP до 7.0. Обычно, в настройках хостинга, вы можете переключиться на версию PHP ниже 7.0 или использовать код для версии 7.0 и выше!

Запросы к MySQL-базе будут посылаться с помощью PHP-скрипта, подключенного к шаблону вывода Content Downloader при парсинге каждого документа во вкладке “контент”.

Если вы хотите, чтобы Content Downloader сам загружал на FTP-сервер картинки или файлы (при парсинге каждого документа), то сделайте так, как написано на этой странице.

MySQL

Где красными маркерами выделено название базы (semh2_ocart1), зелеными маркерами выделены названия таблиц (oc_product), синим маркером выделены названия полей таблицы (product_id), а ниже синего маркера расположены сами записи выбранной таблицы.

Суть метода проста:

– Отправляем данные из Content Downloader PHP-скрипту (макросом(ами) PHP_SCRIPT), который расположен на сервере с MySQL-базой
– Скрипт делает запросы к базе (добавляя в нее записи или обновляя их)

Например, имеем такой скрипт:

1
2
3
4
5
6
7
8
<?php
$db = mysql_connect("localhost", "user5", "password5"); #подключение к MySQL с передачей имени пользователя (user5) и пароля (password5)
mysql_select_db("semh2_ocart1"); #выбираем базу semh2_ocart1
mysql_query("SET NAMES utf8");
$_POST[id] = mysql_real_escape_string($_POST[id]); #экранируем специальные символы в полученных от Content Downloader POST-данных id
$_POST[model] = mysql_real_escape_string($_POST[model]); #экранируем специальные символы в полученных от Content Downloader POST-данных model
mysql_query("INSERT INTO oc_product (product_id, model) VALUES ('$_POST[id]', '$_POST[model]')"); #добавляем запись в таблицу oc_product с полями product_id и model (где $_POST[id] - значение поля product_id, $_POST[model] - значение поля model)
?>

Примечание: Различных запросов mysql_query в одном PHP-скрипте может быть сколько угодно много!

Данный PHP-скрипт располагается на FTP-сервере с нужной базой данных. Он будет выполнять запрос mysql_query(INSERT) к выбранной базе semh2_ocart1. Данный запрос будет добавлять в таблицу oc_product запись с заполняемыми полями: product_id и model. Значения этих полей будут передаваться от Content Downloader в POST-данных $_POST[id] и $_POST[model] соответственно.

В этом случае, чтобы передать эти POST-данные (id и model) из Content Downloader в PHP-скрипт на сервере с базой, нужно в шаблон вывода Content Downloader (ctrl+2) вставить примерно такой макрос PHP_SCRIPT:

1
2
<PHP_SCRIPT=http://адрес_к_скрипту>id=[FIELDVALUE]<CD_GRAN_1!>[/FIELDVALUE]
model=[FIELDVALUE]<CD_GRAN_2!>[/FIELDVALUE]</PHP_SCRIPT>

Где <CD_GRAN_1!> – граница парсинга, которая выводит id, а <CD_GRAN_2!> – выводит model. Подробнее о макросе PHP_SCRIPT вы можете почитать тут


Основные типы MySQL-запросов, которые нам могут понадобиться:

INSERT – служит для добавления записей в таблицу (с ним мы уже знакомы)
UPDATE – служит для обновления полей записей таблицы
SELECT – берет значения записей таблицы
DELETE – служит для удаления записей таблицы (mysql_query (“DELETE FROM таблица WHERE условие”);)

UPDATE:

1
2
3
...
mysql_query("UPDATE oc_product SET model='$_POST[model]', quantity='$_POST[quantity]' WHERE product_id='$_POST[id]'");
...

Этим запросом UPDATE мы присвоим новые значения для полей model и quantity в той записи, где product_id равен $_POST[id]

SELECT:

1
2
3
4
5
...
$result=mysql_query("SELECT quantity FROM oc_product WHERE product_id='$_POST[prod_id]'");
$myrow=mysql_fetch_array($result);
echo($myrow['quantity']);
...

Этим запросом SELECT мы возьмем значение поля quantity из записи (в которой product_id равен $_POST[id]) таблицы oc_product


Как выводить в результат работы скрипта сообщения об ошибках MySQL-запросов:

1
2
3
4
5
6
7
8
...
$retval = mysql_query("UPDATE oc_product SET model='$_POST[model]', quantity='$_POST[quantity]' WHERE product_id='$_POST[prod_id]'");
if(! $retval )
{
  die('Could not update data: ' . mysql_error());
}
echo "Updated data successfully\n";
...
1 Star2 Stars3 Stars4 Stars5 Stars (оценок: 10, средний балл: 4.60)
Loading...
Автор: admin, 25 September 2011
Рубрики: Парсинг
Tags: , ,
Есть 3 коммент. к сообщению: “Автоматический парсинг в MYSQL-базу (обновление цен товаров, добавление записей и многое другое)”
  1. shuser says:

    все отлично. только вопрос, если надо спарсить инфу с сайта донора на свой интернет магазин, в инфе по 800 000 позиций товара. Сколько времени потребуется сидеть с программой для парсинга такого количества инфы?

    • admin says:

      Обычно скорость парсинга – 2-3 товара в секунду. Считайте… =)

  2. Kreol says:

    Дополнение к материалу выше, настройка сбора информации в базу SQL для версии Х
    http://forum.sbfactory.ru/showthread.php?p=10431

Написать комментарий

Последние статьи

css.php