Парсинг сайта - не получается правильно сделать вывод содержимого на экран!

Pavl

Active Member
Регистрация
28.09.2016
Сообщения
43
Добрый день!
Есть такой сайт - https://hramy.ru/regions/city_abc.htm.
Там есть таблица со следующими полями: "Город ", "Район/подчинение ", "Код ", "Регион ", "Центр ".
Задача заключается в том, чтобы вывести на экран поля и содержимое со следующими полями: "Город", "Район", "Регион". C примерно таким видом:
"Анапа : Анапский Район - Краснодарский Край"
или, например
"Бобров : Бобровский Район - Воронежская Область "
и т. д. - все строки из таблицы.

Пробую по-разному сделать код, но хорошего ничего не получается.
Например:

PHP:
require_once 'simple_html_dom.php';

$str ='https://hramy.ru/regions/city_abc.htm';

$curl = curl_init();
curl_setopt($curl,CURLOPT_URL, $str);
curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl,CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$site = curl_exec($curl);

$site = file_get_html('https://hramy.ru/regions/city_abc.htm');

if(count($site->find('#table2 tr')))
    $name = $site->find('td')[0]->text();
    $r = $site->find('td')[1]->text();
    $sourse = $site->find('td')[3]->text();
    echo $name.' : '.$r.' - '.$sourse;
Ещё имеет значение, чтобы код работал именно с "simple_html_dom.php", а не с какой-либо другой библиотекой.
Скажите, пожалуйста, что я делаю не так?
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 138
1) Использовать надо cUrl или file_get_html. Они выполняют однотипную задачу. Сейчас страница дёргается два раза.
И в случае cUrl'a принято закрывать соединение после curl_exec()
PHP:
curl_close($curl); // закрываем соединение
2) Стоит почитать мануал https://simplehtmldom.sourceforge.io/manual.htm
3) Чтобы понять, что возвращается набор элементов (объект), который надо прогонять через цикл
PHP:
$arr = $site->find('#table2 tr');
$html = '';
foreach($arr as $element){
    // Проверка, что это не заголовок
    if($element->find('td')){
        $html .= $element->find('td')[0]->plaintext;
        $html .= ' : ';
        $html .= $element->find('td')[1]->plaintext;
        $html .= ' - ';
        $html .= $element->find('td')[3]->plaintext;
        $html .= '<br>';
    }
}
echo $html;
 
Последнее редактирование:
  • Like
Реакции: Pavl

Pavl

Active Member
Регистрация
28.09.2016
Сообщения
43
1) Использовать надо cUrl или file_get_html. Они выполняют однотипную задачу. Сейчас страница дёргается два раза.
И в случае cUrl'a принято закрывать соединение после curl_exec()
PHP:
curl_close($curl); // закрываем соединение
2) Стоит почитать мануал https://simplehtmldom.sourceforge.io/manual.htm
3) Чтобы понять, что возвращается набор элементов (объект), который надо прогонять через цикл
PHP:
$arr = $site->find('#table2 tr');
$html = '';
foreach($arr as $element){
    // Проверка, что это не заголовок
    if($element->find('td')){
        $html .= $element->find('td')[0]->plaintext;
        $html .= ' : ';
        $html .= $element->find('td')[1]->plaintext;
        $html .= ' - ';
        $html .= $element->find('td')[3]->plaintext;
        $html .= '<br>';
    }
}
echo $html;
Спасибо за исчерпывающий ответ!
 
Верх Низ