抓取整个网站
抓取动态内容需要您实际呈现页面。 PHP 服务器端抓取工具只会执行简单的 file_get_contents 或类似操作。大多数基于服务器的抓取工具不会呈现整个网站,因此不会加载由 Ajax 调用生成的动态内容。
像 Selenium 这样的东西应该可以解决问题。快速谷歌搜索发现了许多关于如何设置它的例子。 Here is one
只抓取 Ajax 调用
虽然我不会考虑这种抓取,但您始终可以使用浏览器开发工具检查 ajax 调用。在网站上的 chrome 中点击 F12 打开开发工具控制台。
然后您应该会看到一个类似上面的窗口。点击network 标签,然后点击 chrome 的刷新按钮。这将显示您和站点之间的每个请求。然后,您可以过滤掉特定请求。
例如,如果您对 Ajax 调用感兴趣,您可以选择 XHR
然后您可以单击表格部分中列出的任何项目以获取更多信息。
文件获取 AJAX 调用的内容
根据 API 在这些 ajax 调用上的稳健程度,您可以执行以下操作。
<?php
$url = "http://www.example.com/test.php?ajax=call";
$content = file_get_contents($url);
?>
如果返回的是 JSON 则添加
$data = json_decode($content);
但是,您必须为网站上的每个 AJAX 请求执行此操作。除此之外,您将不得不使用类似于[here] 提供的解决方案。
最后你还可以实现PhantomJS 来渲染整个网站。
总结
如果您想要的只是特定 ajax 调用返回的数据,您可以使用 file_get_contents 获取它们。但是,如果您尝试抓取恰好也使用 AJAX 来操作文档的整个站点,那么您将无法使用 SIMPLE_HTML_DOM。