apf*_*pfz 6 web-crawler symfony
可以说我有一个像这样的html页面:
<html>
<head></head>
<body>
Hello World!
<div> my other content </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我如何从DOM Crawler获得"Hello World"?
我认为这会奏效:
$crawler = $crawler
->filter('body > div');
->reduce(function (Crawler $node, $i) {
return false;
});
Run Code Online (Sandbox Code Playgroud)
但这显然会出错:
InvalidArgumentException: "The current node list is empty"
Run Code Online (Sandbox Code Playgroud)
Igo*_*vić 10
不知道这是否可以更容易,但您可以使用XPath提取文本节点内容:
$crawler->filterXPath('//body/text()')->text();
Run Code Online (Sandbox Code Playgroud)
结果将是文本前后的string
包含Hello World
和空格,直到第一个标记.因此,如果您只需要文本本身,则可以修剪该值:
$helloWorld = trim($crawler->filterXPath('//body/text()')->text());
Run Code Online (Sandbox Code Playgroud)
但是,如果您在正文中有多个文本节点,这将适用于您的情况,例如:
<html>
<head></head>
<body>
Hello World!
<div> my other content </div>
Some other text
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
你可能会这样做:
$crawler->filterXPath('//body/text()')->extract(['_text']));
Run Code Online (Sandbox Code Playgroud)
这将返回一个数组:
Array
(
[0] =>
Hello World!
[1] =>
Some other text
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5557 次 |
最近记录: |