【问题标题】:PHP Goutte Web ScrapingPHP Goutte 网页抓取
【发布时间】:2018-10-23 20:00:56
【问题描述】:

我想抓取这个:

<a class="pdt_title"> 
  Japan Sun Apple - Fuji
  <span class="pdt_Tweight">2 per pack</span>
</a>

这是我的代码:

use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'https://www.fairprice.com.sg/searchterm/apple');
foreach ($crawler->filter('a.pdt_title') as $node) {
    print $node->nodeValue."\n";
}

我只想刮掉“a”标签内的文本,而不需要“span”标签内的文本。 如何只获取“a”标签内的文本?

【问题讨论】:

标签: php web-scraping goutte domcrawler


【解决方案1】:

查看 HTML 标记,您想要的文本节点落入锚点的第一个子节点。由于每个$node 都是DOMElement 的一个实例,所以可以使用-&gt;firstChild(针对文本节点),然后使用-&gt;nodeValue

foreach ($crawler->filter('a.pdt_title') as $node) {
    echo $node->firstChild->nodeValue . "\n";
}

另一种选择是通过-&gt;filterXpath() 使用xpath,顺便说一下,它在文档中:

foreach ($crawler->filterXpath('//a[@class="pdt_title"]/text()') as $text) {
    echo $text->nodeValue , "\n";
}

相关文档:

https://symfony.com/doc/current/components/dom_crawler.html

xpath 查询仅针对具有该类的锚点,然后是文本。

或者另一个班轮。它返回一个数组,提取文本:

$output = $crawler->filterXpath('//a[@class="pdt_title"]/text()')->extract(array('_text'));

相关 DOM 文档:

http://php.net/manual/en/class.domelement.php
http://php.net/manual/en/class.domnode.php

【讨论】:

    猜你喜欢
    • 2018-10-17
    • 2020-10-26
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    相关资源
    最近更新 更多