PHP Goutte 网页抓取

Posted

技术标签:

【中文标题】PHP Goutte 网页抓取【英文标题】:PHP Goutte Web Scraping 【发布时间】: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”标签内的文本?

【问题讨论】:

请显示定义$client的代码。 @Davіd 我已经编辑了代码.. Symfony 2 Dom Crawler: how to get only text() in Element的可能重复 【参考方案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.phphttp://php.net/manual/en/class.domnode.php

【讨论】:

以上是关于PHP Goutte 网页抓取的主要内容,如果未能解决你的问题,请参考以下文章

PHP抓取网页获取特定信息

php分享十八:网页抓取

使用 PHP 或 Python 的网页抓取技术

让你喜欢的八个 PHP 网页爬虫库与工具

用PHP的curl实现并发请求远程文件(抓取远程网页)

curl抓取网页内容php