Весь день сегодня провел за созданием граббера.
Первый шаг: необходимо обойти сайт по всем внутренним ссылкам и занести все уникальные в базу.
Для этого я использовал cURL+regexp (сам реджексп не помню где именно нашел — но оказался кстати)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
<?php // определяем сам реджексп $regex = '/(<a\s*'; // Start of anchor tag $regex .= '(.*?)\s*'; // Any attributes or spaces that may or may not exist $regex .= 'href=[\'"]+?\s*(?P<link>\S+)\s*[\'"]+?'; // Grab the link $regex .= '\s*(.*?)\s*>\s*'; // Any attributes or spaces that may or may not exist before closing tag $regex .= '(?P<name>\S+)'; // Grab the name $regex .= '\s*<\/a>)/i'; // Any number of spaces between the closing anchor tag (case insensitive) // Инициализируем курл $ch = curl_init('Тут пишем необходимый URL'); // Задаем параметры для курла $headers = array('Content-type: text/html; charset=utf-8'); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // Получаем html $result = curl_exec($ch); // закрываем курл curl_close($ch); // получаем ссылки preg_match_all($regex,$result,$matches); // дальше мы разбираем ссылки, проверяем на уникальность, отбираем только внутренние ссылки, заносим в базу и т.п. |
Второй шаг: необходимо вытащить нужные нам данные из вытащенного контента. Для этого я воспользовался наработкой PHP Simple HTML DOM Parser. Очень удобна, но кушает много памяти. У меня с первого раза вылетело из-за недостатка памяти. Для этого я обрезал контент после получения (убрал сайдбары, хедер). В итоге все нормально.
Синтаксис очень схожий с jQuery, по-этому многим будет легко начать.
|
<?php $html = str_get_html($result);// где результат - это полученный с помощью курла контент foreach($html->find('div[class=post-header] span') as $element) { echo $element->innertext.'<br>'; } |
Дальше уже дело техники и проработки. Можно совершенствовать под свои потребности сколько угодно, чем я и собираюсь завтра заняться 🙂