已被告知解析html的最佳方法是通过DOM这样:
<?
$html = "<span>Text</span>";
$doc = new DOMDocument();
$doc->loadHTML( $html);
$elements = $doc->getElementsByTagName("span");
foreach( $elements as $el)
{
echo $el->nodeValue . "\n";
}
?>
但是在上面变量$ html不能是一个url,还是可以呢? 我不得不使用函数get_file_contents()来获取页面的html?
答案 0 :(得分:1)
您必须使用DOMDocument::loadHTMLFile从网址加载HTML。
$doc = new DOMDocument();
$doc->loadHTMLFile($path);
DOMDocument::loadHTML
解析一串HTML。
$doc = new DOMDocument();
$doc->loadHTML(file_get_contents($path));
答案 1 :(得分:0)
它可以,但它取决于在PHP安装中启用allow_url_fopen。基本上所有基于PHP文件的函数都可以接受URL作为源(或目标)。这样的URL是否有意义取决于您要做的事情。
e.g。执行file_put_contents('http://google.com')
无法正常工作,因为您尝试将HTTP上传到谷歌,并且他们不会允许您更换其主页...
但是$dom->loadHTML('http://google.com');
会有效,并且会在谷歌的主页上吸收DOM进行处理。
答案 2 :(得分:0)
如果您在使用DOM时遇到问题,可以使用CURL
进行解析。例如:
$url = "http://www.davesdaily.com/";
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_URL, $url);
$input = curl_exec($curl);
$regexp = "<span class=comment>([^<]*)<\/span>";
if(preg_match_all("/$regexp/siU", $input, $matches, PREG_SET_ORDER)) {
foreach($matches as $match);
}
echo $match[0];
脚本应抓取<span class=comment>
和</span>
之间的文本并存储在数组$match
中。这应该回应Entertainment
。