【问题标题】:Changing the Base URL for crawled links更改已爬网链接的基本 URL
【发布时间】:2016-02-23 08:40:13
【问题描述】:

我正在使用 Simple HTML DOM 从一些网站抓取链接,但是我遇到了许多网站使用相对链接而不是完整 URL 的问题。

所以发生的情况是我抓取了链接,并将它们直接输出到我的网站上,但每个链接都指向 www.mydomain.com/somearticle 而不是 www.crawleddomain.com /某篇文章

我进行了一些挖掘,发现了BASE tag。由于我从多个站点爬取,我不能只为我的网站设置一个基本标记,因为它会从输出变为输出。因此,我正在寻找仅针对某个 div 的基本标签。我偶然发现了this answer

但是,我尝试手动包含下面的基本 url,但这不起作用:

echo ('http://www.baselink.com/' . strip_tags($post, '<p><a>'));

我也尝试了第二个选项,使用 correct_urls($html, $baseurl); 函数,但显然不存在。

有没有办法在 PHP 的 for 循环中将基本 URL 更改(或附加)到相对 URL?

Here is the output

这是我正在使用的代码:

<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>

【问题讨论】:

    标签: php html web-crawler simple-html-dom base-tag


    【解决方案1】:

    你需要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);
    }
    

    【讨论】:

      猜你喜欢
      • 2014-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 2011-05-21
      • 1970-01-01
      相关资源
      最近更新 更多