我正在使用简单HTML DOM抓取某些网站的链接,但是我遇到了许多网站使用相对链接而不是完整网址的问题。
所以会发生的事情是我抓取链接并将它们直接输出到我的网站上,但每个链接都会导致 www.mydomain.com/somearticle 而不是 www.crawleddomain.com / somearticle 。
我做了一些挖掘,我发现了BASE tag。由于我从多个站点爬行,我不能只为我的网站设置一个基本标签,因为它会从输出更改为输出。所以我一直在搜索只有某个div的基本标签。我偶然发现了this answer。
但是,我尝试手动包含如下所示的基本网址,但这不起作用:
echo ('http://www.baselink.com/' . strip_tags($post, '<p><a>'));
我还尝试使用correct_urls($html, $baseurl);
函数的第二个选项,但显然不存在。
有没有办法在PHP的for循环中更改基本URL(或将其附加到)相对URL?
这是我正在使用的代码:
<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>
答案 0 :(得分:2)
您需要a library that converts relative hrefs to absolute
然后执行以下操作:
include_once('phpuri.php');
$uri = phpUri::parse($target_url);
foreach($html->find('a[href]') as $a){
$a->href = $uri->join($a->href);
}