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

Я сканирую ссылки с некоторых веб-сайтов с помощью простого HTML DOM, однако я столкнулся с проблемой того, что многие веб-сайты используют относительные ссылки вместо полного URL-адреса.

Так что получается, что я сканирую ссылки и выводю их прямо на свой веб-сайт, но каждая ссылка ведет на www.mydomain.com/somearticle вместо www.crawleddomain.com/somearticle.

Я немного покопался и узнал о теге BASE. Поскольку я выполняю сканирование с нескольких сайтов, я не могу просто установить базовый тег для своего сайта, поскольку он будет меняться от вывода к выводу. Поэтому я искал, чтобы иметь базовый тег только для определенного 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);
}
Другие вопросы по тегам