Как добавить очищенные данные сайта в базу данных?
Я хочу хранить:
- наименование товара
- Categoty
- Подкатегория
- Цена
- Производственная компания.
В моей таблице названы products_data с именами полей в виде PID, product_name, категории, подкатегории, product_price и product_company.
я использую curl_init()
функция в php, чтобы первый URL сайта записки, затем я хочу сохранить данные о продуктах в моей таблице базы данных. Вот что я сделал для этого:
$sites[0] = 'http://www.babyoye.com/';
foreach ($sites as $site)
{
$ch = curl_init($site);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($ch);
$title_start = '<div class="info">';
$parts = explode($title_start,$html);
foreach($parts as $part){
$link = explode('<a href="/d/', $part);
$link = explode('">', $link[1]);
$url = 'http://www.babyoye.com/d/'.$link[0];
// now for the title we need to follow a similar process:
$title = explode('<h2>', $part);
$title = explode('</h2>', $title[1]);
$title = strip_tags($title[0]);
// INSERT DB CODE HERE e.g.
$db_conn = mysql_connect('localhost', 'root', '') or die('error');
mysql_select_db('babyoye', $db_conn) or die(mysql_error());
$sql = "INSERT INTO products_data(PID, product_name) VALUES ('".$url."', '".$title."')"
mysql_query($sql) or die(mysql_error());
}
}
Я немного запутался с частью базы данных, как вставить данные в таблицу. Любая помощь?
1 ответ
Есть несколько вещей, которые вы, возможно, пожелаете рассмотреть на этапе проектирования до написания некоторого кода:
- Обобщайте ваши решения настолько, насколько это возможно. Если вам приходится писать код PHP для каждого нового цикла, ваши изменения в разработке, необходимые, если целевой сайт меняет свой макет, могут быть слишком медленными и могут нарушить работу создаваемого вами предприятия. Это очень важно, если вы собираетесь очистить большое количество сайтов, так как шансы реструктуризации сайта статистически больше.
- Один из способов добиться этого обобщения - использовать готовые библиотеки, которые уже хороши в этом. Поэтому вместо использования cURL используйте Goutte или какую-либо другую программную браузерную систему. Это даст вам сеансы бесплатно, которые на некоторых сайтах необходимо переходить с одной страницы на другую. Вы также получите селекторы CSS, чтобы указать, какие элементы контента вас интересуют.
- Для табличного содержимого сохраните на локальном сайте таблицу базы данных, которая преобразует заголовок заголовка в имя столбца базы данных. Для сеток продуктов вы можете использовать таблицу для преобразования селектора CSS (скажем, относительно каждой ячейки сетки) в столбец. Любой из них облегчит реагирование на изменения формата целевого сайта (ов).
- Если вы извлекаете текст с сайта, как минимум, вам необходимо запустить его через надлежащую управляющую систему, в противном случае целевой сайт может теоретически добавить контент на своем сайте, чтобы добавить SQL по своему выбору в вашу базу данных. В любом случае, апостроф на их стороне обязательно вызовет сбой вашего вызова, поэтому вы должны использовать
mysql_real_escape_string
, - Если вы извлекаете HTML с сайта с целью его повторного отображения, всегда не забывайте сначала правильно его очищать. Это означает удаление ненужных тегов, удаление атрибутов, которые могут быть нежелательными, и обеспечение правильной вложенности структуры. Я обнаружил, что HTMLPurifier хорош для этого.
При ползании помните:
- Будьте хорошим роботом и определите уникальный USER_AGENT для себя, поэтому операторы сайта легко заблокируют вас, если захотят. Это плохой этикет, чтобы маскировать под человека, скажем, Internet Explorer. Включите URL-адрес дружественной справочной страницы в свой пользовательский агент, как это делает GoogleBot.
- Не сканируйте прокси или другие системы, предназначенные для сокрытия вашей личности - сканируйте открыто.
- Респект robots.txt; Если сайт желает заблокировать скребки, им следует разрешить сделать это, используя уважаемые соглашения. Если вы действуете как поисковая система, шансы оператора, желающего заблокировать вас, очень низки (разве большинство людей не хотят, чтобы поисковые машины их проверяли?)
- Всегда делайте некоторые ограничения скорости, иначе это произойдет. На моем ноутбуке для разработки через медленное соединение я могу очищать сайт со скоростью две страницы в секунду, даже не используя multi_curl. На реальном сервере это может быть намного быстрее - может быть, 20? В любом случае, выполнение такого количества запросов к одному целевому IP/ домену - отличный способ оказаться в чьем-то списке. Таким образом, если вы царапаете, делайте это медленно.
- Я веду таблицу HTTP-обращений и придерживаюсь правила, согласно которому, если я сделал запрос за последние 5 секунд, я "приостановил" эту очистку и вместо этого обработал что-то еще. Я возвращаюсь к остановленным царапинам, когда достаточно времени прошло. Я могу быть склонен увеличить это значение и удерживать параллельное состояние большего количества приостановленных операций в памяти.
- Если вы просматриваете несколько сайтов, один из способов сохранить производительность без
sleep
Чрезмерное использование - это чередование запросов, которые вы хотите сделать, в циклическом порядке. Итак, сделайте одну HTTP-операцию на 50 сайтах, сохраните состояние каждого скрапа и вернитесь к первому. - Если вы реализуете чередование многих сайтов, вы можете использовать
multi_curl
распараллелить ваши HTTP-запросы. Я бы не рекомендовал использовать это на одном сайте по причинам, уже указанным (удаленный сервер может в любом случае ограничить количество подключений, которые вы можете открыть для них отдельно). - Будьте осторожны, основывая все свое предприятие на очистке одного сайта. Если они блокируют вас, вы довольно застряли. Если ваша бизнес-модель может полагаться на очистку многих сайтов, то блокирование одного из них становится менее рискованным.
Кроме того, это может быть экономически эффективным путем установки стороннего программного обеспечения для соскоба или получения стороннего сервиса, который сделает это за вас. Мои собственные исследования в этой области выявили очень мало организаций, которые оказались способными (и имейте в виду, что на момент написания статьи я не пробовал ни одну из них). Итак, вы можете посмотреть на это:
- 80legs - коммерческий
- Мозенда - коммерческая
- Обыкновенный обход - F/OSS
- Ползать везде - F/OSS