我想刮的实际动态创建的URL在本网页的菜单中使用PHP:如何使用PHP从动态网页中删除页面链接?
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');
}
}
?>
,但它没有这样做这个特定页面的工作。例如,我的代码返回一个网址,如:
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"
到底,这就是我想要的。
希望你能帮助 感谢
一个简单的说明是,我认为你最好不要在HTML上使用'substr()'(我不认为通过将整个HTML加载到'DOMDocument'中将会有任何主要的性能折衷)。至于这个问题,如果额外的数据在页面加载后由JS追加,PHP将永远无法看到这一点。您需要尝试基于JS的无头浏览器,如[PhantomJS](http://phantomjs.org/),[SlimerJS](http://slimerjs.org/),[Zombie.js](http:// zombie.labnotes.org/)等。 – Sam
这些问题的第一步是在浏览器中关闭JavaScript,刷新所需的页面,然后查看数据是否仍然存在。如果是这样,你可以用一个基于cURL的库来做你想做的事情(基于Guzzle,Goutte非常出色)。如果不是,那么你需要一个(较慢)的无头浏览器(参见@ Sam的评论)。 – halfer
观察萤幕灯/镀铬检查器的网络标签。他们添加到页面的信息来自某处,通常是从页面加载后运行的远程休息API获取。有时api拥有一切你想要的一个漂亮的清洁包,你甚至不需要刮... – dandavis