Изменение базового URL для просканированных ссылок

Я сканирую ссылки с некоторых веб-сайтов с помощью 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>

1

Решение

Тебе нужно библиотека, которая преобразует относительные hrefs в абсолютные

Затем сделайте что-то вроде:

include_once('phpuri.php');

$uri = phpUri::parse($target_url);

foreach($html->find('a[href]') as $a){
$a->href = $uri->join($a->href);
}
2

Другие решения

Других решений пока нет …