对div的某个部分进行HTML解析

时间:2013-11-12 19:11:25

标签: php html html-parsing data-scrubbing

我正在尝试访问HTML页面并从动态生成的div中获取特定数字。

<span itemprop="average" content="XX"></span>

我想将“XX”检索为变量,每个页面都会有所不同。

这是通过HTML解析还是简单的preg_replace完成的?

由于

3 个答案:

答案 0 :(得分:2)

如果你刚刚开始拼抢我会推荐Imacros或import.io我开始使用它们开始我的抓取任务时我开始理解它是如何工作得更好。将cUrl与Php一起使用也很有帮助,刮下它将是你最好的朋友

答案 1 :(得分:1)

不要使用REGEX来解析HTML。最好的方法是使用解析器。 PHP5附带了一些内容,如DOMDocumentDOMXPath

以下是使用两者进行完成的示例:

$html = '<html><head></head><body>
<span itemprop="average" content="XX">some text</span>
<span itemprop="not_average">other text</span>
</body></html>';


$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);

$nodelist = $xpath->query( "//span[@itemprop='average']" );

foreach ($nodelist as $node){
    print $node->getAttribute('content')."<br>";
}

唯一的“捕获”是DOMDocument解析器比浏览器解析器更具限制性,并且会在从interwebs中提取的某些页面上“hickup”。

答案 2 :(得分:0)

使用DOM通常是最好的想法。

$html = <<<HTML
<html>
  <body>
    <span itemprop="average" content="XX"></span>
  </body>
</html>
HTML;

libxml_use_internal_errors(TRUE);

$dom = new DOMDocument();
$dom->loadHtml($html);
$xpath = new DOMXpath($dom);

$content = $xpath->evaluate('string(//span[@itemprop = "average"]/@content)');

var_dump($content);

libxml_use_internal_errors()禁用错误html的错误输出。您可以使用libxml_get_errors()来读取它们,使用libxml_clear_errors()来清除当前的错误缓冲区。

接下来创建一个DOMDocument并加载html。 DOMDocument :: loadHtmlFile()允许从文件或URL加载它。

加载文档后,您可以为加载的文档创建DOMXpath对象,它允许您从中查询元素。

DOMXpath :: evaluate()允许您从文档中查询节点列表和标量。 xpath表达式中的字符串类型转换将属性节点强制转换为字符串并返回该值。如果没有类型转换,结果将是包含任何DOMAttribute节点数的DOMNodelist。有了它,结果就是属性值或空字符串。