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

时间:2014-01-20 21:02:47

标签: 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"添加到最后,这就是我想要的。

希望你能提供帮助 感谢

1 个答案:

答案 0 :(得分:1)

编辑:只是为了确认,我看过你试图用JavaScript关闭的网站,看起来Mainnav网址是使用JavaScript生成的,所以你将无法在不使用无头浏览器。

根据@Sam和@ halfer的评论,如果您需要抓取一个包含JavaScript生成的动态网址的网站,那么您需要使用支持JavaScript的抓取工具。

如果你想在PHP中进行大量的开发,那么我建议不要尝试通过PHP使用无头浏览器,而是依靠可以抓取JavaScript呈现页面并为你返回内容的服务。

我找到的最好的一个,以及我们在项目中使用的那个,是https://phantomjscloud.com/

它便宜,快速,应该做你需要的一切。

祝你好运!