Не правильно работает парсер php

281
22 января 2017, 17:26

В общем простой, незамысловатый парсер, который работает только в верхней части страницы. Гугл сказал, что надо использовать $start и $finish, но если я их прописываю вообще ничего не парсится. Сайт-донор имеет такую структуру:

<div class="firm-list-item firm-place-1">~контент который нужно забрать~</div>
<div class="firm-list-item firm-place-2">~контент который нужно забрать~</div>
<div class="firm-list-item firm-place-2">~контент который нужно забрать~</div>

Вот между 1 и 2 дивами контент забирается, а дальше нет.. Вот код самого парсера:

$title=file_get_contents($url);
$start = '<div class="firm-list-item firm-place-2">';
$finish = '<div class="firm-list-item firm-place-3">';
$pos=strpos($title,'<a class="firm-item-title" href=');
$title=substr($title,$pos);
$pos1=strpos($title,'</a>');
$title=substr($title,0,$pos1);
$title=preg_replace('<a class="firm-item-title" href="/firm/id/[0-9]+/">','',$title);
echo $title;
echo '<br>';

Подскажите, пожалуйста, в чем тут проблема(где написать $start и $finish?).

Answer 1

Воспользуйтесь библиотекой PHPQuery (https://github.com/punkave/phpQuery) проще будет.

require ('phpQuery/phpQuery.php');

function get_content_by_url($url_target) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url_target); 
    curl_setopt($ch, CURLOPT_HEADER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Google Bot'); 
    $data = curl_exec($ch); 
    curl_close($ch);
    return $data;
}
$url_target = 'http://example.site.com/';
$html_content = get_content_by_url($url_target);
$document = phpQuery::newDocument($html_content);
$found_items = $document->find('div.firm-list-item[class^="firm-place-"]');
$print = '';
foreach($found_items as $key => $item) {
    $pq = pq($item);
    $content_text = pq($item)->text(); // только текст
    $content_html = pq($item)->html(); // весь html (контент)
    $print .= '<li class="my_item">'. $content_html .'</li>';
}
$final_contentt = '<ul class="my_list">'. $print . '</ul>';
echo $final_contentt; 

по идее должно работать.

READ ALSO
Работа с полями типа time

Работа с полями типа time

Здравствуйте! У меня есть в таблице два поля time_1 и time_2 в них хранится время например 17:00:00 и 02:00:00 Мне нужно вывести те строки где реальное время...

293
Не работает UPDATE записи в БД MySQL

Не работает UPDATE записи в БД MySQL

Есть окно редактирования анкетных данных пользователя, в нем есть кнопка, по нажатию на которою должны обновляться данные пользователя в БД MySQL

259