Задать вопрос
PhP_Raz
@PhP_Raz
Web - developer

Что не так при парсинге сайта!?

Здравствуйте.
Дали задание спарсить сайт https://itp.ne.jp/genre_dir/9570/pg/1/?sr=1&ngr=1&... .
Нужно вытащить данные о каждой компании
13bf1a382b6a4c13b2268c7bd19e75de.png
Не занимался ни чем подобным раньше, поэтому возникли трудности. Использовал curl и библиотеку Simple HTML DOM.
require_once('simple_html_dom.php');
 
function curl_get($url, $referer = 'https://www.google.ru/') {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_REFERER, $referer);
    $out = curl_exec($ch);  
    curl_close($ch);
    return $out;
}
 
 
$html = curl_get('https://itp.ne.jp/genre_dir/9570/pg/1/?sr=1&ngr=1&num=20');
$dom = str_get_html($html);
$companies = $dom->find('.highlightedResultsBox section');
 
$res = '';
$res .= '<table style="">
            <thead>
                <tr>
                <th scope="row">№</th>
                <th>Имя компании</th>
                <th>Адрес</th>
                <th>Телефон</th>
                <th>Email</th>
                </tr>
            </thead>
            <tbody>';
$i = 1;
 
foreach ($companies as $company) {
 
    $name = $company->find('h4 a', 0);
    $address = $company->find('p', 1);
    $phone = $company->find('p', 2);
    $email = $company->find('p a', 3);
 
    $data['name'] = $name->plaintext;
    $data['address'] = $address->plaintext;
    $data['phone'] = $phone->plaintext;
    $data['email'] = $email->plaintext;
 
    $attr[] = $email->attr;
        
    foreach($attr as $item){
        if (!empty($item['onclick']) && isset($item['onclick'])) {
            $data['email'] = $item['onclick'];
        }
        else break;
    }
 
$res .= '<tr>';
    $res .= '<td>' . $i . '</td>';
    $res .= '<td>' . $data['name'] . '</td>';
    $res .= '<td>' . $data['address'] . '</td>';
    $res .= '<td>' . $data['phone'] . '</td>';
    $res .= '<td>' . $data['email'] . '</td>';
    $res .= '</tr>';
    $i++;
}
$res .= '</tbody></table>';
 
echo $res;

Вот что выдает
3b216f693d0141439b1d8c0529f72a61.png
Выводится только два элемента и почему то каждый раз разные данные.
Подскажите, пожалуйста, что не так делаю. Спасибо
  • Вопрос задан
  • 175 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
highlightedResultsBox

как бэ намекает что это только подсвеченные результаты.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽