加载和解析外部HTML的一部分

时间:2012-09-25 11:24:28

标签: dom

我想使用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

有人可以指出我正确的方向吗?

2 个答案:

答案 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将是一个很好的起点。