Просто интересно, может ли кто-нибудь помочь мне в дальнейшем со следующим. Я хочу проанализировать URL-адрес на этом веб-сайте: http: //www.directorycritic.com/free-directory-list.html? Pg = 1 & sort = pr
У меня есть следующий код:
<?PHP $url = "http://www.directorycritic.com/free-directory-list.html?pg=1&sort=pr"; $input = @file_get_contents($url) or die("Could not access file: $url"); $regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>"; if(preg_match_all("/$regexp/siU", $input, $matches)) { // $matches[2] = array of link addresses // $matches[3] = array of link text - including HTML code } ?>
Что в настоящее время ничего не делает, и что мне нужно для этого – это удалить весь URL-адрес в таблице на все 16 страниц и по-настоящему оценить некоторую помощь в том, как изменить это выше, чтобы сделать это и вывести URL-адрес в текстовый файл.
Использовать HTML Dom Parser
$html = file_get_html('http://www.example.com/'); // Find all links $links = array(); foreach($html->find('a') as $element) $links[] = $element->href;
Теперь массив ссылок содержит все URL-адреса данной страницы, и вы можете использовать эти URL-адреса для дальнейшего анализа.
Разбор HTML с регулярными выражениями не является хорошей идеей. Вот несколько связанных сообщений:
РЕДАКТИРОВАТЬ:
Некоторые другие инструменты анализа HTML, описанные Гордоном в комментариях ниже:
Вы действительно не должны использовать регулярные выражения для синтаксического анализа HTML, так как это относится к ошибкам.
Лучше использовать HTML-парсер, например , библиотеку DOM в PHP :
$code = file_get_contents($url); $doc = new DOMDocument(); $doc->loadHTML($code); $links = array(); foreach ($doc->getElementsByTagName('a') as $element) { if ($element->hasAttribute('href')) { $links[] = $elements->getAttribute('href'); } }
Обратите внимание, что это будет собирать ссылки URI, как они появляются в документе, а не как абсолютный URI. Возможно, вы захотите разрешить их раньше.
Похоже, что PHP не предоставляет соответствующую библиотеку (или я ее еще не нашел). Но см. RFC 3986 – Референсное разрешение и мой ответ на Преобразование относительного URL-адреса в абсолютный URL-адрес с помощью Simple HTML DOM? для получения дополнительной информации.