Я бы предложил SimpleXml или DOM для этой задачи, но они будут задыхаться от недопустимой разметки, и, к сожалению, большинство в Интернете все еще использует недопустимую разметку, включая Google , который вы упомянули в своем вопросе. Вы можете извлечь HTML из этих URL и аккуратные их, но вы также можете использовать SimpleHTML
$links = array('inbound' => array(),
'outbound' => array());
$url = 'http://www.example.com';
$host = parse_url($url, PHP_URL_HOST);
$html = file_get_html($url);
foreach($html->findElementsByTagName('a') as $link) {
$linkHost = parse_url($link->href, PHP_URL_HOST);
$type = ($linkHost === $host) ? 'inbound' : 'outbound';
$links[$type][] = $link->href;
}
print_r($links);
Обратите внимание, что у меня нет установленного банкомата SimpleHTML, поэтому вышеописанное может не работать из коробки. Это должно направить вас в правильном направлении.
РЕДАКТИРОВАТЬ
О, мальчик, я правда это написал? Я был пьян или что-то? И почему никто не жаловался на это? Чтобы исправить себя:
DOM отлично справляется с битым HTML, если вы используете метод loadHTML()
. SimpleXml нет. Предлагаемое решение с SimpleHtmlDom, вероятно, будет работать, но IMO SimpleHTMLDom - отстой. Лучшие сторонние библиотеки можно найти в Лучшие методы для анализа HTML .