Я написал скрипт на php
для разбора ссылки каждого состояния, расположенного под заголовком High School Directory by State
таблицы из этот URL. Моя первая функция fetch_item_links()
может правильно извлекать эти ссылки. Что я хочу сделать сейчас, так это указать эти URL-адреса в функции fetch_info()
, чтобы она анализировала the red colored link
из целевая страница.
Вторая функция также работает безупречно, когда я указываю любой отдельный URL-адрес для тестирования, как в Вот этот.
Однако, когда я пытаюсь запустить весь скрипт, я не получаю никакого вывода. Тоже нет ошибки.
Это моя попытка:
<?php
$url = 'http://www.directoryofschools.com/high-schools/US.html';
$prefix = 'http://www.directoryofschools.com';
function fetch_item_links($link,$base)
{
$html_doc = new DOMDocument();
@$html_doc->loadHtmlFile($link);
$content_xpath = new DOMXPath($html_doc);
$item_row = $content_xpath->query('//*[@class = "online_college_list"]//tr//td//a[@title]');
$packtBook = array();
for ($i=0; $i <$item_row->length; $i++){
$title = $item_row->item($i)->getAttribute('href') . "<br/>";
$string = $base . str_replace("..", "", $title);
$packtBook[] = $string;
}
return $packtBook;
}
function fetch_info($link)
{
$html_doc = new DOMDocument();
@$html_doc->loadHtmlFile($link);
$content_xpath = new DOMXPath($html_doc);
$item_row = $content_xpath->query('//*[@class = "online_college_list"]//tr//td//a[@title]');
for ($i=0; $i <$item_row->length; $i++){
$title = $item_row->item($i)->getAttribute('href') . "<br/>";
echo $title;
}
}
$items = fetch_item_links($url,$prefix);
foreach($items as $file){
fetch_info($file);
}
?>
Как я могу заставить свой скрипт работать?
Вы добавляете <br/>
к URL-адресу в fetch_item_links, что означает, что вы не сможете загрузить его через loadHtmlFile()
. Измените строку на
$title = $item_row->item($i)->getAttribute('href');
На самом деле, в обоих случаях было бы лучше удалить <br/>
и добавлять его к строке только тогда, когда вы повторяете его.
Правильно, ты @aynber. Ваше предложение, похоже, уже решило проблему.
Небольшой вопрос: когда я удаляю это @
из @$html_doc
, как предложил @Ugo T., я получаю нужные ссылки вместе с ошибками, как в Warning: DOMDocument::loadHTMLFile(): Opening and ending tag mismatch: tr and tbody in http://www.directoryofschools.com/high-schools/US.html, line: 54 in C:\xampp\htdocs\PHP\test.php on line 8
. Как я могу избавиться от такой ошибки. Заранее спасибо @aynber.
Это хороший вопрос. Похоже, что HTML на другой стороне неправильно сформирован, так что это немного сложно. Попробуйте эту ссылку: stackoverflow.com/questions/1148928/… и используйте libxml_use_internal_errors(true);
Хотел бы я проголосовать за ваше решение несколько раз. Да, это тоже решило проблему.
Вероятно, у вас есть какие-то ошибки с функцией
loadHtmlFile()
, но вы их не видите, потому что используете оператор контроля ошибок@
. Попробуйте удалить его и посмотреть, какие ошибки отображаются.