我想使用php
从外部网站提取(解析)部分HTML文档例如:要从雅虎提取新闻,我尝试使用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;
?>
致命错误:在非对象中调用成员函数find() 第1113行/home/a1234bc/public_html/simple_html_dom.php
然后我尝试回显加载的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;
?>
现在我明白了:
致命错误:在非对象中调用成员函数innertext() 第1688行/home/a1234bc/public_html/simple_html_dom.php
我也尝试过使用DOMDocument()到file_get_contents()
<?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:实体中没有名称,行:166英寸 第37行/home/a1234bc/public_html/simple_html_dom.php
警告:DOMDocument :: loadHTML()[domdocument.loadhtml]: htmlParseEntityRef:期待';'在实体,行:166英寸 第37行/home/a1234bc/public_html/simple_html_dom.php
警告:DOMDocument :: loadHTML()[domdocument.loadhtml]: htmlParseEntityRef:实体中没有名称,行:256英寸 第37行/home/a1234bc/public_html/simple_html_dom.php
警告:DOMDocument :: loadHTML()[domdocument.loadhtml]: htmlParseEntityRef:期待';'在实体中,行:256英寸 第37行/home/a1234bc/public_html/simple_html_dom.php
警告:DOMDocument :: loadHTML()[domdocument.loadhtml]:标记 fb:登录按钮在实体中无效,行:256英寸 第37行/home/a1234bc/public_html/simple_html_dom.php
警告:DOMDocument :: loadHTML()[domdocument.loadhtml]: htmlParseEntityRef:期待';'在实体,行:275英寸 第37行/home/a1234bc/public_html/simple_html_dom.php
警告:DOMDocument :: loadHTML()[domdocument.loadhtml]: htmlParseEntityRef:期待';'在实体,行:287 in 第37行/home/a1234bc/public_html/simple_html_dom.php
警告:DOMDocument :: loadHTML()[domdocument.loadhtml]: htmlParseEntityRef:期待';'在实体,行:292 in 第37行/home/a1234bc/public_html/simple_html_dom.php
警告:DOMDocument :: loadHTML()[domdocument.loadhtml]: htmlParseEntityRef:期待';'在实体,行:311 in 第37行/home/a1234bc/public_html/simple_html_dom.php
警告:DOMDocument :: loadHTML()[domdocument.loadhtml]:属性 在实体中重新定义的类,行:325英寸 第37行/home/a1234bc/public_html/simple_html_dom.php
有人可以指出我正确的方向吗?
答案 0 :(得分: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
希望这有帮助!
答案 1 :(得分:-1)
DOMDocument / SimpleXML用于解析XML而不是HTML。您需要使用file_get_contents将HTML转换为字符串,然后使用字符串操作函数来获取所需的部分。 preg_match_all将是一个很好的起点。