是否有人知道如何使用PHP获取HTML文档中特定元素的值?我现在正在做的是使用file_get_contents
从另一个网站提取HTML代码,并在该网站上有一个textarea:
<textarea id="body" name="body" rows="12" cols="75" tabindex="1">Hello World!</textarea>
我想要做的是让我的脚本执行file_get_contents
,然后拔出“Hello World!”来自textarea。那可能吗?很抱歉打扰你们,再次,你们给出了一些有用的建议:]。
答案 0 :(得分:7)
不要抱怨我们,这是一个很好的问题,我很乐意回答。您可以使用PHP Simple HTML DOM Parser获取所需内容:
$html = file_get_html('http://www.domain.com/');
$textarea = $html->find('textarea[id=body]');
$contents = $textarea->innertext;
echo $contents; // Outputs 'Hello World!'
如果您想使用file_get_contents()
,可以这样做:
$raw_html = file_get_contents('http://www.domain.com/');
$html = str_get_html($raw_html);
...
虽然我认为没有必要使用file_get_contents()
,因为如果您在某处需要,可以使用outertext
方法获取原始的完整HTML:
$html = file_get_html('http://www.domain.com/');
$raw_html = $html->outertext;
只是为了踢,你也可以使用单行正则表达式来执行此操作:
preg_match('~<textarea id="body".*?>(.*?)</textarea>~', file_get_contents('http://www.domain.com/'), $matches);
echo $matches[1][0]; // Outputs 'Hello World!'
我强烈建议不要这样做,因为你更容易受到代码更改的影响,这可能会破坏这个正则表达式。
答案 1 :(得分:2)
我建议使用PHP DOM & DOMXPath类。
$dom = DOMDocument::loadHTMLFile( $url );
$xpath = new DOMXPath( $dom );
$nodes = $xpath->query('//textarea[id=body]' )
$result = array();
for( $nodes as $node ) {
$result[] = $node->textContent;
}
$result
将包含每个具有id body的textarea的值。