如何在PHP中刮取ajax调用

时间:2015-09-17 05:33:54

标签: web-scraping simple-html-dom

请让我知道在装载PHP的ajax之后可以废弃一些信息吗?我只使用SIMPLE_HTML_DOM作为静态页面。

感谢您的建议。

2 个答案:

答案 0 :(得分:2)

刮刮整个网站

抓取动态内容需要您实际呈现页面。 PHP服务器端的scraper只会执行一个简单的file_get_contents或类似的操作。大多数基于服务器的scrappers都不会呈现整个站点,因此不会加载Ajax调用生成的动态内容。

像Selenium这样的东西应该可以解决问题。快速谷歌搜索找到了许多关于如何设置它的例子。 Here is one

刮刮Jax Ajax调用

虽然我不会考虑这种刮擦,但您可以使用浏览器开发工具检查ajax调用。在Chrome中,在网站上点击F12以打开开发工具控制台。

enter image description here

然后您应该看到如上所示的窗口。点击network标签,然后点击Chrome的刷新按钮。这将显示您和网站之间的每个请求。然后,您可以过滤掉特定请求。

例如,如果您对Ajax调用感兴趣,可以选择XHR enter image description here

然后,您可以单击已提交部分中列出的任何项目以获取更多信息。

文件获取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。

答案 1 :(得分:0)

最后我解决了我的问题。我只是获得了一个带有来自ajax调用的所有参数的POST url,并使用SIMPLE_HTML_DOM类发出相同的请求。