очистка всех изображений с веб-сайта с помощью DOMDocument

В основном я хочу получить ВСЕ изображения на любом веб-сайте, используя DOMDocument. но тогда я даже не могу загрузить свой html по некоторым причинам, которых я пока не знаю.

$url="http://<any_url_here>/";
$dom = new DOMDocument();
@$dom->loadHTML($url); //i have also tried removing @
$dom->preserveWhiteSpace = false;
$dom->saveHTML();
$images = $dom->getElementsByTagName('img');
foreach ($images as $image) 
{
echo $image->getAttribute('src');
}

что происходит, ничего не печатается. или я что-то не так сделал с кодом?


person Leonid    schedule 09.04.2013    source источник
comment
причина, по которой вы не получаете сообщение об ошибке, вероятно, заключается в этой строке @$dom->loadHTML($url); в php, '@' скрывает все сообщения об ошибках для этой функции.   -  person S.Visser    schedule 09.04.2013
comment
я удалил его много лет назад, но до сих пор я не получил никакого результата ...   -  person Leonid    schedule 09.04.2013
comment
Вы не получите результата, потому что $dom->loadHTML() ожидает html. Вы даете ему URL-адрес, вам сначала нужно получить html страницы, которую вы хотите проанализировать. Вы можете использовать file_get_contents() для этого. (см. ответ)   -  person S.Visser    schedule 09.04.2013
comment
Я добавил $html = file_get_contents(sitehere/); затем загрузил html-файл $dom-›loadHTML($html); теперь это дало мне ошибку. Ошибка: DOMDocument::loadHTML(): класс атрибута переопределен в Entity   -  person Leonid    schedule 09.04.2013


Ответы (1)


Вы не получите результата, потому что $dom->loadHTML() ожидает html. Вы даете ему URL-адрес, вам сначала нужно получить html страницы, которую вы хотите проанализировать. Для этого вы можете использовать file_get_contents().

Я использовал это в своем классе захвата изображений. У меня работает нормально.

$html = file_get_contents('http://www.google.com/');
$dom = new domDocument;
$dom->loadHTML($html);
$dom->preserveWhiteSpace = false;
$images = $dom->getElementsByTagName('img');
foreach ($images as $image) {
  echo $image->getAttribute('src');
}
person S.Visser    schedule 09.04.2013
comment
Теперь у меня есть класс атрибутов, переопределенный в ошибке сущности. $dom = new DOMDocument; $htmls = file_get_contents("http://philcooke.com/inspiration-happens-but-the-best-ideas-take-time/"); $dom->loadHTML($htmls); - person Leonid; 09.04.2013
comment
ваш ответ был почти правильным. просто добавьте символ @ перед $dom->loadHTML($html) - person Leonid; 09.04.2013
comment
В качестве альтернативы добавлению «@» перед $dom->loadHTML($html) для подавления ошибки вы можете использовать tidy, чтобы сначала очистить html. $tidy = tidy_parse_string($html); $html = $tidy->html()->value; Но, может быть, это уже слишком. - person Kurt Zhong; 28.11.2013