Я сканирую ссылки с некоторых веб-сайтов с помощью Simple HTML DOM, однако я столкнулся с проблемой того, что многие веб-сайты используют относительные ссылки вместо полного URL-адреса.
Так что получается, что я сканирую ссылки и выводю их прямо на мой сайт, но каждая ссылка ведет к www.mydomain.com/somearticle вместо www.crawleddomain.com/somearticle.
Я немного покопался и узнал о Базовый тег. Так как я сканирую несколько сайтов, я не могу просто установить базовый тег для своего сайта, потому что он будет меняться от вывода к выводу. Поэтому я искал, чтобы иметь базовый тег только для определенного div. Я наткнулся на этот ответ.
Тем не менее, я попытался вручную включить базовый URL, как показано ниже, но это не сработало:
echo ('http://www.baselink.com/' . strip_tags($post, '<p><a>'));
Я также попробовал второй вариант, с correct_urls($html, $baseurl);
функция, но, видимо, не существует.
Есть ли способ изменить базовый URL (или добавить его) к относительным URL в цикле for в PHP?
И вот код, который я использую:
<div class='rcorners1'>
<?php
include_once('simple_html_dom.php');
$target_url = "http://www.buzzfeed.com/trending?country=en-us";
$html = new simple_html_dom();
$html->load_file($target_url);
$posts = $html->find('ul[class=list--numbered trending-posts trending-posts-now]');
$limit = 10;
$limit = count($posts) < $limit ? count($posts) : $limit;
for($i=0; $i < $limit; $i++){
$post = $posts[$i];
$post->find('div[class=trending-post-text]',0)->outertext = "";
echo strip_tags ($post, '<p><a>');
}
?>
</div>
</div>
Тебе нужно библиотека, которая преобразует относительные hrefs в абсолютные
Затем сделайте что-то вроде:
include_once('phpuri.php');
$uri = phpUri::parse($target_url);
foreach($html->find('a[href]') as $a){
$a->href = $uri->join($a->href);
}
Других решений пока нет …