首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Goutte和

使用Goutte和
EN

Stack Overflow用户
提问于 2020-07-06 21:49:13
回答 2查看 1.2K关注 0票数 1

我的控制器提供了以下方法,可以从站点获取数据:

代码语言:javascript
复制
$goutteClient = new Client();
$guzzleClient = new GuzzleClient([
   'timeout' => 60,
]);
$goutteClient->setClient($guzzleClient);
$crawler = $goutteClient->request('GET', 'https://html.duckduckgo.com/html/?q=Laravel');
$crawler->filter('.result__title .result__a')->each(function ($node) {
    dump($node->text());
});

上面的代码为我提供了搜索结果中内容的标题。我还想获得相应搜索结果的链接。它驻留在类result__extras__url中。

如何同时过滤链接和标题?或者我必须为此运行另一个方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-06 23:32:53

尝试检查节点的属性。获得href属性后,对其进行解析以获得URL。

代码语言:javascript
复制
$crawler->filter('.result__title .result__a')->each(function ($node) {
    $parts = parse_url(urldecode($node->attr('href')));
    parse_str($parts['query'], $params);
    $url = $params['uddg']; // DDG puts their masked URL and places the actual URL as a query param.
    $title = $node->text();
});
票数 1
EN

Stack Overflow用户

发布于 2020-07-06 23:21:14

对于解析,我通常执行以下操作:

代码语言:javascript
复制
$doc = new DOMDocument();
$doc->loadHTML((string)$crawler->getBody());

从那时起,您可以在DOMDocument上使用getElementsByTagName函数进行访问。

例如:

代码语言:javascript
复制
$rows = $doc->getElementsByTagName('tr');
foreach ($rows as $row) {
    $cols = $row->getElementsByTagName('td');
    $value = trim($cols->item(0)->nodeValue);
}

您可以在https://www.php.net/manual/en/class.domdocument.php中找到更多信息

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62757500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档