Webcrawler извлечь элементы ссылки - PullRequest
0 голосов
/ 01 июля 2018

Я хочу извлечь элементы из веб-страницы.

$html = file_get_contents($link);

Эта функция возвращает полный HTML-файл, и я хочу, чтобы только внутренние и внешние ссылки сохраняли их в базе данных.

$sql = "INSERT INTO prueba (link, title, description) VALUES (?, ?, ?)";

//preparando los datos
$query = $pdo->prepare($sql);

//orden de ejecucion
$result = $query->execute([
  $link,
  $title_out,
  $description
]);

Здесь мне уже удается извлечь описание и заголовок, и мне удается поместить их в базу данных, но я хочу извлечь все внешние и внутренние ссылки. Внутренние ссылки в одном столбце и внешние ссылки в другом. У меня уже есть оба столбца в базе данных.

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

HTML утилизация

Для этого я советую вам использовать библиотеки с открытым исходным кодом, которые предоставляют вспомогательные функции для навигации в DOM. Без этого вам придется поддерживать гораздо больше кода. Если вы хотите управлять списком на несколько страниц, вам придется обновлять запросы регулярных выражений при каждом обновлении страницы.

Ты не хочешь этого ^^ '

Один пример из библиотеки " Goutte " (надеюсь, вы в + PHP 5.5)

$links = [];
$crawler->filter('a')->each(function ($node) {
    var_dump($node->attr('href'));
    $links[] = $node->attr('href');
});

$links теперь содержит все ссылки атрибута на странице

Для получения более подробной информации о путешествии по узлам, см. эту ссылку

Используйте логику базы данных для сохранения этих данных

Извините, если в коде Гутта есть ошибка, я редко его использую

0 голосов
/ 01 июля 2018

Я предлагаю использовать библиотеку DOM-Parser, например:

Разбор HTML и просто "запрос" для всех якорей (теги a).

Гораздо менее подвержен ошибкам, чем пытаться извлечь их самостоятельно, например, с помощью регулярных выражений.

...