web-dev-qa-db-ja.com

PHP

[〜#〜] php [〜#〜] でユーザーが指定したURLから別のページの小さなプレビューを作成する方法を探しています。

ページのタイトル、画像(Webサイトのロゴなど)、および使用可能な場合は少しのテキストまたは説明のみを取得します。外部ライブラリ/クラスなしでこれを行う簡単な方法はありますか?ありがとう

これまで、DOCDocumentクラスを使用してHTMLをロードし、画面に表示してみましたが、それが適切な方法だとは思いません

18
federico-t

simple_html_dom を検討することをお勧めします。それは非常に簡単になります。

タイトルと最初の画像をプルする方法の実際の例を次に示します。

<?php
require 'simple_html_dom.php';

$html = file_get_html('http://www.google.com/');
$title = $html->find('title', 0);
$image = $html->find('img', 0);

echo $title->plaintext."<br>\n";
echo $image->src;
?>

これは、外部ライブラリなしで同じことを行う2番目の例です。 HTMLで正規表現を使用することはお勧めできません。

<?php
$data = file_get_contents('http://www.google.com/');

preg_match('/<title>([^<]+)<\/title>/i', $data, $matches);
$title = $matches[1];

preg_match('/<img[^>]*src=[\'"]([^\'"]+)[\'"][^>]*>/i', $data, $matches);
$img = $matches[1];

echo $title."<br>\n";
echo $img;
?>
30
Jordan Mack

これらのライブラリのいずれかを使用できます。ご存知のとおり、それぞれに長所と短所があるため、それぞれについてメモを参照するか、時間をかけて自分で試してみてください。

  • Guzzle :独立したHTTPクライアントなので、cURL、SOAPまたはRESTに依存する必要はありません。
  • Goutte :Symfony開発者によってGuzzleといくつかのSymfonyコンポーネント上に構築されています。
  • hQuery :キャッシュ機能を備えた高速スクレーパー。大きなドキュメントのスクレイピングでの高いパフォーマンス。
  • リクエスト :ユーザーフレンドリーな使用法で有名です。
  • バズ :初心者に最適な軽量クライアント。
  • ReactPHP :包括的なチュートリアルと例を備えた非同期スクレイパー。

あなたはそれらすべてをチェックして、すべての人をその最高の意図された機会に使用する方がよいでしょう。

4
Behrad Khodayar

これには SimpleHtmlDom を使用できます。次に、タイトルとimgタグ、または他に必要なことを探します。

2
Vijay Sharma

Dom Crawler ライブラリが好きです。非常に使いやすく、次のような多くのオプションがあります。

$crawler = $crawler
->filter('body > p')
->reduce(function (Crawler $node, $i) {
    // filters every other node
    return ($i % 2) == 0;
});
0
forsberg