javascript - 如何使用 PHP 从动态网页中抓取页面链接?

标签 javascript php html

我想使用 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/

相关文章:

javascript - 如何使用 jCrop 调整图像大小以适应所有纵横比?

php - 在没有 ssh 访问服务器的情况下使用 Composer

php - MySQL 查询过滤器和排序行匹配类似于工作匹配或功能比较

javascript - 无法下载具有下载属性的文本文件

c# - C# 中巧妙的 5x5 字母网格

html - 表格以及如何管理数据

javascript - SOAPUI:SIMple Groovy 脚本 - 导入语句存在语法错误?

javascript - 如何在 Heroku 上记录错误

javascript - 即使所选选项没有更改,是否有任何方法可以在 Chrome 中的 SELECT 元素上触发点击事件?

php - 更改 MySql 中的变量