试图仅从带有xpath的div检索文本

时间:2013-12-17 05:39:37

标签: php html regex xpath

我正在尝试编写一个文档,该文档将通过编码不佳的网页并返回title元素。但是,我计划抓取网站的人没有使用任何类,只是div元素。下面是我试图抓取的源网页:

<tbody>
<tr>
<td style = "...">
<div style = "...">
<div style = "...">TEXT I WANT</div>
</div>
</td>
</tr>
</tbody>

当我在chrome中复制xpath时,我得到这个字符串:

/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[1]/td/div/div[3]

我无法确定将该字符串放在xpath查询中的位置。 如果不是xpath查询,我可以做一个preg_match吗?

我试过了:

$location = '/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[1]/td/div/div[3]';
$html = file_get_contents($URL);
$doc = new DomDocument();
$doc->loadHtml($html);
$xpath = new DomXPath($doc);
// Now query the document:
foreach ($xpath->query($location) as $node) {
  echo $node, "\n";
}

但页面上没有任何内容。

感谢。

编辑:完整的代码: http://pastebin.com/K5tZ4dFH

EDIT2:清洁代码屏幕截图:http://i.imgur.com/lWKheBy.png

2 个答案:

答案 0 :(得分:1)

从查看来源,请尝试以下操作:

$html = file_get_contents($URL);

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

$xpath = new DOMXPath($doc);
$nodes = $xpath->query("//div[contains(@style, 'left:20px')]");

foreach ($nodes as $node) {
   echo $node->textContent;
}

答案 1 :(得分:1)

看起来你想要第一个</div>之前的文字,所以这个正则表达式会找到:

[^<>]+(?=<\/div>)

这是live demo