1

PHPを使って外部サイトからHTML文書の一部を抽出(解析)したい

例: yahoo からニュースを抽出するために、 sourceforgeの SimpleHTML DOM Parser を使用してみました

<?php
$url="http://news.yahoo.com/einsteins-brain-now-interactive-ipad-app-071441969.html";
include('simple_html_dom.php');  
$html=new simple_html_dom();
$html->load_file($url);
$xxx=$html->find('title')->innertext; 
echo $xxx;
?>

致命的なエラー: 行 1113 の /home/a1234bc/public_html/simple_html_dom.php の非オブジェクトに対するメンバー関数 find() の呼び出し


次に、ロードされたhtmlをエコーし​​ようとしました

<?php
$url="http://news.yahoo.com/einsteins-brain-now-interactive-ipad-app-071441969.html";
include('simple_html_dom.php');  
$html=new simple_html_dom();
$html->load_file($url);
echo $html;
?>

今私は得る:

致命的なエラー: 1688 行目の /home/a1234bc/public_html/simple_html_dom.php の非オブジェクトに対するメンバー関数 innertext() の呼び出し


file_get_contents() を通じて DOMDocument() も使用してみました

<?php
$url="http://news.yahoo.com/einsteins-brain-now-interactive-ipad-app-071441969.html";
$content = file_get_contents($url);
// echo $content works perfect

$doc = new DOMDocument();
$doc->loadHTML($content);
$jjj=$doc->getElementsByTagName('title')->item(0);
echo $jjj;
?>

これにより、非常に長い警告リストが表示されます。最初の 10 個だけをコピペしてみましょう

警告: DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: Entity に名前がありません。行: 37 行目の /home/a1234bc/public_html/simple_html_dom.php の 166

警告: DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: ';' が必要です エンティティの行: 37 行目の /home/a1234bc/public_html/simple_html_dom.php の 166

警告: DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: Entity に名前がありません。行: 37 行目の /home/a1234bc/public_html/simple_html_dom.php の 256

警告: DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: ';' が必要です エンティティの行: 37 行目の /home/a1234bc/public_html/simple_html_dom.php の 256

警告: DOMDocument::loadHTML() [domdocument.loadhtml]: タグ fb:login-button がエンティティで無効です。行: 37 行目の /home/a1234bc/public_html/simple_html_dom.php の 256

警告: DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: ';' が必要です エンティティの行: 37 行目の /home/a1234bc/public_html/simple_html_dom.php の 275

警告: DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: ';' が必要です エンティティの行: 37 行目の /home/a1234bc/public_html/simple_html_dom.php の 287

警告: DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: ';' が必要です エンティティの行: 37 行目の /home/a1234bc/public_html/simple_html_dom.php の 292

警告: DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: ';' が必要です エンティティの行: 311 in /home/a1234bc/public_html/simple_html_dom.php 行 37

警告: DOMDocument::loadHTML() [domdocument.loadhtml]: Entity で再定義された属性クラス、行: 325 行目 /home/a1234bc/public_html/simple_html_dom.php の 37 行目

誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

0

マニュアルに示されているように、オブジェクト指向の方法を使用すると、同じエラーが発生しました。

// Create a DOM object
$html = new simple_html_dom();

// Load HTML from a string
$html->load('<html><body>Hello!</body></html>');

// Load HTML from a URL 
$html->load_file('http://www.google.com/');

// Load HTML from a HTML file 
$html->load_file('test.htm');

マニュアルに示されているように、エラーを取り除き、クイック方法に切り替えたときにスクリプトが機能するようになりました。

// Create a DOM object from a string
$html = str_get_html('<html><body>Hello!</body></html>');

// Create a DOM object from a URL
$html = file_get_html('http://www.google.com/');

// Create a DOM object from a HTML file
$html = file_get_html('test.htm');

これ$html->findがうまくいった後!

PHP Simple HTML DOM Parser のマニュアルは、http ://simplehtmldom.sourceforge.net/manual.htm にあります。

お役に立てれば!

于 2013-02-14T11:50:00.470 に答える
-1

DOMDocument/SimpleXML は、HTML ではなく XML を解析するために設計されています。file_get_contents を使用して HTML を文字列に変換し、文字列操作関数を使用して必要な部分を取得する必要があります。preg_match_allは、開始するのに適した場所です。

于 2012-09-25T11:31:38.270 に答える