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
的一个实例,所以可以使用->firstChild
(针对文本节点),然后使用->nodeValue
:
foreach ($crawler->filter('a.pdt_title') as $node)
echo $node->firstChild->nodeValue . "\n";
另一种选择是通过->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 网页抓取的主要内容,如果未能解决你的问题,请参考以下文章