更改抓取链接的基础 URL
Changing the Base URL for crawled links
我正在从一些使用简单 HTML DOM 的网站抓取 links,但是我 运行 遇到许多网站使用相对 links 而不是完整的 URL.
所以我抓取 link 并将它们直接输出到我的网站上,但是每个 link 都会导致 www.mydomain.com/somearticle 而不是 www.crawleddomain.com/somearticle。
我进行了一些挖掘,发现了 BASE tag. Since I am crawling from multiple sites, I cannot just set a base tag for my website, because it will change from output to output. So I was searching to have a base tag only for a certain div. I stumbled upon this answer。
但是,我尝试像下面那样手动包含基础 url,但这没有用:
echo ('http://www.baselink.com/' . strip_tags($post, '<p><a>'));
我也尝试了第二个选项,使用 correct_urls($html, $baseurl);
功能,但显然不存在。
有什么方法可以在 PHP 的 for 循环中将基数 URL(或将其附加)更改为相对 URLs?
这是我使用的代码:
<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>
你需要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);
}
我正在从一些使用简单 HTML DOM 的网站抓取 links,但是我 运行 遇到许多网站使用相对 links 而不是完整的 URL.
所以我抓取 link 并将它们直接输出到我的网站上,但是每个 link 都会导致 www.mydomain.com/somearticle 而不是 www.crawleddomain.com/somearticle。
我进行了一些挖掘,发现了 BASE tag. Since I am crawling from multiple sites, I cannot just set a base tag for my website, because it will change from output to output. So I was searching to have a base tag only for a certain div. I stumbled upon this answer。
但是,我尝试像下面那样手动包含基础 url,但这没有用:
echo ('http://www.baselink.com/' . strip_tags($post, '<p><a>'));
我也尝试了第二个选项,使用 correct_urls($html, $baseurl);
功能,但显然不存在。
有什么方法可以在 PHP 的 for 循环中将基数 URL(或将其附加)更改为相对 URLs?
这是我使用的代码:
<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>
你需要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);
}