我想使用 PHP 在此网页的菜单中抓取实际动态创建的 URL:
http://groceries.iceland.co.uk/
我以前用过这样的东西:
<?php
$baseurls = array("http://groceries.iceland.co.uk/");
foreach ($baseurls as $source)
{
$html = file_get_contents($source);
$start = strpos($html,'<nav id="mainNavigation"');
$end = strpos($html,'</nav>',$start);
$mainarea = substr($html,$start,$end-$start);
$dom = new DOMDocument();
@$dom->loadHTML($mainarea);
// grab all the urls on the page
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");
for ($i = 0; $i < $hrefs->length; $i++)
{
$href = $hrefs->item($i);
$url = $href->getAttribute('href');
}
}
?>
但它并没有为这个特定的页面做这项工作。例如,我的代码返回一个 url,例如:
groceries.iceland.co.uk//frozen-chips-and-potato-products
但我希望它给我:
groceries.iceland.co.uk//frozen/chips-and-potato-products/c/FRZCAP?q=:relevance&view=list
浏览器将 "/c/FRZCAP?q=:relevance&view=list"
添加到末尾,这就是我想要的。
希望能帮到你 谢谢
最佳答案
编辑:为了确认,我查看了您尝试在关闭 JavaScript 的情况下抓取的网站,看起来 Mainnav url 是使用 JavaScript 生成的,因此您将无法在不使用 headless 浏览器。
根据@Sam 和@halfer 的评论,如果您需要抓取具有由 JavaScript 生成的动态 URL 的网站,那么您将需要使用支持 JavaScript 的抓取工具。
如果您想在 PHP 中完成大部分开发工作,那么我建议您不要尝试通过 PHP 使用 headless 浏览器,而是依赖可以抓取 JavaScript 呈现页面并为您返回内容的服务。
我找到的最好的一个,也是我们在项目中使用的一个,是 https://phantomjscloud.com/
关于javascript - 如何使用 PHP 从动态网页中抓取页面链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21244093/