Re: Пишу простенький парсер. Проблема с записью результатов Заменил http://pars1.svdmag.ru/mylessons/count.php. Выводит "CHERY", а в БД не пишет
Re: Пишу простенький парсер. Проблема с записью результатов В phpmyadmin эти запросы отрабатывают? Найди mysql функцию которая возвращает код ошибки выполнения запроса и посмотри что она возращает
Re: Пишу простенький парсер. Проблема с записью результатов tb_parts_name TINYTEXT, tb_parts_code VARCHAR(255), tb_cars_manufacture VARCHAR(255), tb_cars_model VARCHAR(255) Это таблица, собственно Добавлено спустя 3 минуты 25 секунд: Re: Пишу простенький парсер. Проблема с записью результатов в БД Я не знаю, как это проверить в PHPMyAdmin, сейчас попробую. Где это примерно смотреть?
Re: Пишу простенький парсер. Проблема с записью результатов в phpmyadmin можно выполнить sql запрос в базе данных После выбора базы данных есть вкладка SQL Добавлено спустя 1 минуту 39 секунд: Re: Пишу простенький парсер. Проблема с записью результатов в БД А что с tb_cars_model, покажи структуру базы полностью, можно там же через экспорт получить
Re: Пишу простенький парсер. Проблема с записью результатов Это запросил Код (Text): INSERT INTO `parts_temp`(`id`, `tb_parts_name`, `tb_parts_code`, `tb_cars_manufacture`, `tb_cars_model`) VALUES ([value-1],[value-2],[value-3],[value-4],[value-5]) Это ответило Добавлено спустя 2 минуты 7 секунд: Re: Пишу простенький парсер. Проблема с записью результатов в БД tb_cars_model я просто не дописал в запросе, он и с ним и без него одинаковый результат выдает. Вот так я создал таблицу в бд, собственно, структура та же и осталась, я не изменял в ней ничего Код (Text): mysql_query("CREATE TABLE parts_temp(id int auto_increment primary key, tb_parts_name TINYTEXT, tb_parts_code VARCHAR(255), tb_cars_manufacture VARCHAR(255), tb_cars_model VARCHAR(255))") or die(mysql_error()); mysql_close(); print "Table created!<br>"; Добавлено спустя 16 минут 20 секунд: Re: Пишу простенький парсер. Проблема с записью результатов в БД Если прямо так вставить: Код (Text): INSERT INTO `parts_temp` (`tb_parts_name`, `tb_parts_code`, 'tb_cars_manufacture') VALUES ('{$element_name[$i]->innertext}', '{$element_article[$i]->innertext}', '{$cars_arr[$i]}') Пишет Добавлено спустя 4 минуты 1 секунду: Re: Пишу простенький парсер. Проблема с записью результатов в БД Это скрин. Вот интересно, первые два столбца он подкрашивает, а последний нет...
Re: Пишу простенький парсер. Проблема с записью результатов потому что вместо грависа там апостроф. то есть не указание имени поля а строковое значение. вы бы сначала почитали основы программирования, основы баз данных а потом уже брались за что-то серьезное. смотреть на вас жалко. отладку не умеем делать, очевидные ошибки - допускаем. но нужно сделать прям кровь из носу... не с той стороны зашли...
Re: Пишу простенький парсер. Проблема с записью результатов Вот так добавил запрос Код (Text): INSERT INTO `parts_temp` (`tb_parts_name`, `tb_parts_code`) VALUES ('{$element_name[$i]->innertext}', '{$element_article[$i]->innertext}') Пишет: А вот на это Код (Text): INSERT INTO `parts_temp` (`tb_parts_name`, `tb_parts_code`, 'tb_cars_manufacture', 'tb_cars_model') VALUES ('{$element_name[$i]->innertext}', '{$element_article[$i]->innertext}', '{$cars_arr[$i]}', '{$models_arr[$i]}') Выдает ошибку: Добавлено спустя 3 минуты 43 секунды: Re: Пишу простенький парсер. Проблема с записью результатов в БД Кажется, допер. Сейчас попробую. Я на самом деле в php новичок, а до этого на action script во флеше работал, а вот, апостроф здесь высветился, а у меня в редакторе все одинаково выглядит, что грависа, что апостроф.
Re: Пишу простенький парсер. Проблема с записью результатов да, он тебе пишет то же самое что и я. на моменте 'tb_ ошибка. почему? потому что при перечислении полей вдруг начинается строка. почему? потому что серверы/базы/таблицы/поля выделяются грависов. это вот такой знак ` который ты можешь наблюдать 6 раз в рабочем запросе и 6 раз в нерабочем запросе. а дальше после последнего грависа у тебя почему то идет апостроф. это вот такой знак ' и он какбэ обрамляет строковые значения. но при этом строка у тебя декларируется в блоке перечисления полей. скуэль очень просит тебя так не делать а ты поскольку не читал основ и банально эрудицией сравнить своё и не своё не можешь - не удовлетворяешь похоти бездушной железяки.
Re: Пишу простенький парсер. Проблема с записью результатов Кстати, перебирая темы про массивы в php, синтаксис и бегло прочитав учебник на php-s.ru, про грависы и апострофы нигде ничего не встретил. ) Добавлено спустя 52 секунды: Re: Пишу простенький парсер. Проблема с записью результатов в БД И получилось ведь! ну, спасибо ) Ты сам из какого города?
Re: Пишу простенький парсер. Проблема с записью результатов а причем тут массивы-то? ты поле перечисляешь. в запросе к субд. значит обязан знать основы работы с субд.
Re: Пишу простенький парсер. Проблема с записью результатов Это я просто сказал, что читая материал, в т.ч. о массивах, а еще и о mysql не увидел об апострофах и грависах никакого замечания. До этого из флэш я только передавал значения переменных в php или другие языки. А для БД придумывал только структуру и связи между таблицами, писал ТЗ. А вот самому программировать не приходилось. Сейчас изучаю, в данном случае на примере парсера. Сильно глубоко вникать не хочу. Круг моих задач ограничивается сбором информации, структурированием, возможно наполнением. Программистов моих слишком долго ждать приходится, когда что-то надо срочно сделать. Вот сейчас мне надо будет спарсить артикулы деталей и названия из каталогов и вставить все в 1С, бывают заказы на наполнения сайта, а выдергивать инфу нужно с другого сайта (те же названия и картинки). Есть задачи в области анализа конкурентов, а мне не хочется, чтобы о всех моих придумках и заморочках знали другие. А в штат прогера взять пока по финансам накладно. Сегодня 4-й день изучения php, а пока я искал ошибку, которую ты нашел, очень многое для себя изучил, подчерпнул.
Re: Пишу простенький парсер. Проблема с записью результатов а пхп тут толком не причем. язык структурированных запросов это отдельный стандарт, не зависящий от других языков. но иногда зависящий от конкретной субд которая вносит свои плюшки в него. в 1с насколько я помню тот же скуэль стандарт. разве что в вашей конфигурации не используются прямые запросы к скуэль-серверу. тогда конечно вам скуэль не будет знаком. но с другой стороны - 1с это не только движок но и некоторая база данных. следовательно программист обязан знать основы субд. логично?
Re: Пишу простенький парсер. Проблема с записью результатов Логично. В целом я имею представление об этом, т.к. вел пару проектов, но сам ничего не писал, у меня был в команде программист. Язык ни при чем, это понятно. Представление о том, что я делаю у меня есть четкое, а вот, как это пишется, нет. Вот и изучаю. Но сильно глубоко в программирование углубляться пока не планирую. Так, попарсить что-то на скорую руку, создать прототип будущего проекта, чтобы протестировать реакцию аудитории, а потом передавать прогеру более опытному. Последний раз писал программу в 2008 году в Action Script. Тут возникла необходимость, задачи разные, но несложные. Вот, по сути, этот парсер, что я сделал, писать 10-15 минут, а поставить задачу программисту 30-40 минут, еще потом что-то не так сделает, трата времени на объяснения. Что ТЗ написать, что прототип накидать, по времени небольшая разница, зато, прежде, чем тратить деньги на реализацию проекта, можно протестировать и уже потом составить более подробное задание для программиста.
Re: Пишу простенький парсер. Проблема с записью результатов Парсер я сделал в итоге. Код ниже. Усложняю себе задачу и опишу ее в следующей теме. Смысл в том, что я заметил на том же сайте несколько страниц (пагинация). И стоит задача пропарсить все их за раз. Код самого парсера Код (Text): <?php // example of how to use advanced selector features include('config.php'); include('simple_html_dom.php'); //$page_where_parse='http://relines.ru/catalog/chery-amulet/'; $page_where_parse=$_POST['page_adress']; $html = file_get_html($page_where_parse); //УСЛОВНЫЕ КОНСТАНТЫ. СЮДА ЖЕ ПЕРЕДАЮТСЯ ДАННЫЕ С ФОРМЫ $count_pars = count ($html->find('p.b-catalog__item__sku a')); //$car='CHERY'; //$model='Amulet'; //$rusname='Чери Амулет'; //$prefix='body'; $car=$_POST['car']; $model=$_POST['model']; $rusname=$_POST['rusname']; $prefix=$_POST['prefix']; $td_adress_folder='/katalog/'.$car.'/'.$model.'/'.$prefix.'/'; //проверяю скрипт на ошибки. Если выводится это, то ошибок в синтаксисе нет, по идее. //echo 'it works <br/>'.$count_pars.'<br/>'; //МАССИВЫ СОДЕРЖАНИЕ САЙТА $element_article=$html->find('p.b-catalog__item__sku a'); $element_name=$html->find('p.b-catalog__item__t a'); $td_adress_arr = array(); $td_content_arr = array(); $td_keywords_arr=array(); $td_description_arr=array(); $td_title_arr=array(); $td_content_arr=array(); ?> <html> <head> <title>Парсер RELINES.RU</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link href="/css/base.css" rel="stylesheet"> <!-- Bootstrap --> <link href="/css/bootstrap.css" rel="stylesheet"> <link href="/css/bootstrap-theme.css" rel="stylesheet"> <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <!-- Include all compiled plugins (below), or include individual files as needed --> <script src="/js/bootstrap.min.js"></script> <script type="text/javascript" src="/js/carousel.js"></script> </head> <body> <?php for($i = 0; $i < $count_pars; $i++) { //CONTENT $td_content_arr[$i]=' <ol class="breadcrumb"> <li><a href="/">Запчасти для иномарок</a></li> <li><a href="/sp-catalogs/china-parts/1/">Запчасти для китайских автомобилей</a></li> <li class="active">'.$element_name[$i]->innertext.' '.$car.' '.$model.' ('.$rusname.') '.$element_article[$i]->innertext.'</li> </ol> <h1>'.$element_name[$i]->innertext.' '.$car.' '.$model.' ('.$rusname.') '.$element_article[$i]->innertext.'</h1> <div class="row"> <!--ИЗОБРАЖЕНИЕ--> <div class="col-lg-8"><img class="img-thumbnail" src="/_upload/no.gif"></div> <!--ИЗОБРАЖЕНИЕ--/> <!--КНОПКИ--> <div class="col-lg-4"> <div>Артикул</div> <h2>'.$element_article[$i]->innertext.'</h2> <a href="/search.html?article='.$element_article[$i]->innertext.'" class="btn btn-danger"><span class="glyphicon glyphicon-search"></span> Посмотреть цены и наличие</a> <p>Выберете оптимальный срок поставки и цену на товар с нашего склада или складов наших поставщиков</p> <h3><a hreg="/contacts/">Адреса магазинов</a></h3> <h3><a hreg="/about/delivery/">Доставка по России</a></h3> <button type="button" class="btn btn-danger btn-lg" data-toggle="modal" data-target="#signservice"> Запись в автосервис </button> <!--SOCSETI--> <div class="social-buttons"> <h5>Поделиться в социальных сетях</h5> <script type="text/javascript" src="//yastatic.net/share/share.js" charset="utf-8"></script><div class="yashare-auto-init" data-yashareL10n="ru" data-yashareQuickServices="vkontakte,facebook,twitter,odnoklassniki,moimir,gplus" data-yashareTheme="counter"></div> </div> <!--SOCSETI--> </div> <!--/КНОПКИ--> </div> <!--MODAL--> <div class="modal fade" id="signservice" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Закрыть</span></button> <h4 class="modal-title" signserviceLabel">Запись в автосервис</h4> </div> <div class="modal-body"> <h3><a href="/services/repair/krasnodar/">Адреса СТО в Краснодаре</a></h3> <iframe frameborder="No" src="https://MyTaskHelper.ru/widgets/b_hAT_m0nkVjbodEu4MghJ/cBgfPAdLHcuie3jN-X-1p4?iframe=true" height="1170px" scrolling="No" width="100%"></iframe> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Закрыть</button> </div> </div> </div> </div> <!--/MODAL--> '; //CONTENT //ПОДГОТОВКА ПЕРЕМЕННЫХ global $car, $model, $td_adress_folder; $td_keywords_arr[$i]=$element_name[$i]->innertext.' '.$cars_arr[$i].' '.$models_arr[$i].', '.$element_article[$i]->innertext; $td_adress_arr[$i]=$td_adress_folder.$element_article[$i]->innertext.'/'; $td_title_arr[$i]=$element_name[$i]->innertext.' ('.$rusname.') '.$element_article[$i]->innertext; $td_description_arr[$i]='Магазин-склад запчастей. Автозапчасти для китайских автомобилей в наличии и на заказ. У нас Вы можете купить '.$element_name[$i]->innertext.' '.$element_article[$i]->innertext.' в розницу по оптовой цене. Доставка запчастей по всей России.'; //ВЫВОД ДАННЫХ //echo '<tr><td>'.$element_article[$i]->innertext.'</td><td>'.$element_name[$i]->innertext.'</td><td>'.$car.'</td><td>'.$model.'</td><td>'.$td_adress_arr[$i].'</td><td>'.$td_title_arr[$i].'</td></tr>'; //запись в бд. mysql_query(" INSERT INTO `parts_temp` (`tb_parts_name`, `tb_parts_code`, `tb_cars_manufacture`, `tb_cars_model`, `td_adress`, `td_title`, `td_keywords`, `td_description`, `td_content`) VALUES ('{$element_name[$i]->innertext}', '{$element_article[$i]->innertext}', '{$car}', '{$model}', '{$td_adress_arr[$i]}', '{$td_title_arr[$i]}','{$td_keywords_arr[$i]}', '{$td_description_arr[$i]}', '{$td_content_arr[$i]}')"); } ?> <div class="container container-fluid"> <h1>Парсинг страницы </h1> <p><?php echo $page_where_parse; ?></p> <p>Действие выполнено успешно. Добавлено записей: <?php echo $count_pars; ?></p> <p><a href="/pars-rlns.html"><b>Парсить новую страницу</b></a></p> <h2>Желаете отменить действие?</h2> <form class="form" role="form" name="form1" action="/delete-rlns.php" method="post"> <div class="form-group"> <div class="input-group"> <label class="sr-only" for="delete-rows">Удалить последние записи в кол-ве:</label> <div class="input-group-addon"><span class="glyphicon glyphicon-list"></span></div> <input type="text" class="form-control" id="delete-rows" name="delete-rows" value="<?php echo $count_pars; ?>"> </div> <div class="input-group"> <label class="sr-only" for="delete-model">Где модель:</label> <div class="input-group-addon"><span class="glyphicon glyphicon-list"></span></div> <input type="text" class="form-control" id="delete-model" name="delete-model" value="<?php echo $model; ?>"> </div> <button type="submit" class="btn btn-default">Удалить <span class="glyphicon glyphicon-remove"></button> </div> </form> </div> </body> </html> Код страницы, куда вводим адрес страницы и прочие параметры парсинга Код (Text): <html> <head> <title>Простенький парсер</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link href="/css/base.css" rel="stylesheet"> <!-- Bootstrap --> <link href="/css/bootstrap.css" rel="stylesheet"> <link href="/css/bootstrap-theme.css" rel="stylesheet"> <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <!-- Include all compiled plugins (below), or include individual files as needed --> <script src="/js/bootstrap.min.js"></script> <script type="text/javascript" src="/js/carousel.js"></script> </head> <body> <div class="container container-fluid"> <h1>Парсим RELINES.PHP</h1> <form class="form-inline" role="form" name="form1" action="/parse-rlns.php" method="post"> <div class="form-group"> <div class="input-group"> <label class="sr-only" for="page_adress">Адрес страницы</label> <div class="input-group-addon"><span class="glyphicon glyphicon-home"></span></div> <input type="page_adress" class="form-control" id="page_adress" name="page_adress" placeholder="http://"> </div> </div> <div class="form-group"> <label class="sr-only" for="car">Марка автомобиля латинскими</label> <input type="text" class="form-control" id="car" name="car" placeholder="Марка автомобиля"> </div> <div class="form-group"> <label class="sr-only" for="model">Модель автомобиля латинскими</label> <input type="text" class="form-control" id="model" name="model" placeholder="Модель автомобиля"> </div> <div class="form-group"> <label class="sr-only" for="car">Префикс адреса</label> <input type="text" class="form-control" id="prefix" name="prefix" placeholder="Например body"> </div> <div class="form-group"> <label class="sr-only" for="car">Название марки и модели на русском</label> <input type="text" class="form-control" id="rusname" name="rusname" placeholder="Например Чери Амулет"> </div> <button type="submit" class="btn btn-default">Парсить</button> </form> <p>Все вводите латинскими буквами. Марка и модель также используются в формировании адреса страницы.</p> </div> </body> </html> И вот, если нужно удалить последние записи. Я тут кривенько написал, т.к. парсить я буду не этот сайт, а на этом тренируюсь, поэтому не заморчаиваюсь. Код (Text): <?php include('config.php'); $delete_count=$_POST['delete-rows']; $delete_model=$_POST['delete-model']; for($i = 0; $i <$delete_count; $i++) { mysql_query("DELETE FROM `parts_temp` WHERE `tb_cars_model` = '{$delete_model}' ORDER BY id DESC LIMIT 1"); } ?> <html> <head> <title>Парсер RELINES.RU</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link href="/css/base.css" rel="stylesheet"> <!-- Bootstrap --> <link href="/css/bootstrap.css" rel="stylesheet"> <link href="/css/bootstrap-theme.css" rel="stylesheet"> <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <!-- Include all compiled plugins (below), or include individual files as needed --> <script src="/js/bootstrap.min.js"></script> <script type="text/javascript" src="/js/carousel.js"></script> </head> <body> <div class="container container-fluid"> <h1>Записи удалены</h1> <p>Модель автомобиля: <?php echo $delete_model; ?></p> <p>Количество записей: <?php echo$delete_count; ?></p> <p><a href="/pars-rlns.html">Парсить дальше</a></p> </div> </body> </html>