1

Simple HTML DOM を使用して一部の Web サイトからのリンクをクロールしていますが、多くの Web サイトが完全な URL ではなく相対リンクを使用しているという問題に遭遇しました。

そのため、リンクをクロールして自分の Web サイトに直接出力しますが、各リンクはwww.crawleddomain.com/somearticleではなくwww.mydomain.com/somearticleにつながります。

掘り下げてみたところ、BASEタグについて知りました。複数のサイトからクロールしているため、出力ごとに変更されるため、Web サイトのベースタグを設定することはできません。そのため、特定のdivのみにベースタグを付けるように検索していました。私はこの答えに出くわしました。

ただし、以下のようにベース URL を手動で含めようとしましたが、うまくいきませんでした。

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

関数を使用して2番目のオプションも試しました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>
4

1 に答える 1

2

相対hrefを絶対に変換するライブラリが必要です

次に、次のようにします。

include_once('phpuri.php');

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

foreach($html->find('a[href]') as $a){
  $a->href = $uri->join($a->href);
}
于 2016-02-24T23:21:05.817 に答える