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
Выводится только два элемента и почему то каждый раз разные данные.
Подскажите, пожалуйста, что не так делаю. Спасибо
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
highlightedResultsBox

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

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

Похожие вопросы
27 нояб. 2024, в 18:19
2000 руб./за проект
27 нояб. 2024, в 17:41
2000 руб./за проект
27 нояб. 2024, в 17:26
1 руб./за проект