假设我有一个这样的html页面:
<html>
<head></head>
<body>
Hello World!
<div> my other content </div>
</body>
</html>
如何从DOM Crawler获取“Hello World”?
我认为这样可行:
$crawler = $crawler
->filter('body > div');
->reduce(function (Crawler $node, $i) {
return false;
});
但这显然会出错:
InvalidArgumentException: "The current node list is empty"
答案 0 :(得分:10)
不知道这是否可以更容易完成,但您可以使用XPath提取文本节点内容:
$crawler->filterXPath('//body/text()')->text();
结果将是包含string
的{{1}}以及文字前后的空格,直到第一个标记。因此,如果您只想要文本本身,您可以修改值:
Hello World
但是,如果您在正文中有多个文本节点,这将适用于您的情况,例如:
$helloWorld = trim($crawler->filterXPath('//body/text()')->text());
您可以这样做:
<html>
<head></head>
<body>
Hello World!
<div> my other content </div>
Some other text
</body>
</html>
这将返回一个数组:
$crawler->filterXPath('//body/text()')->extract(['_text']));