【问题标题】:How to scrape ajax calls in PHP如何在 PHP 中抓取 ajax 调用
【发布时间】:2015-12-13 21:38:07
【问题描述】:

请让我知道是否可以在 ajax 加载 PHP 后废弃一些信息?我只将 SIMPLE_HTML_DOM 用于静态页面。

感谢您的建议。

【问题讨论】:

  • 您是让服务器发出 ajax 请求,还是在客户端运行 PHP?也许如果您向我们展示您已经拥有的代码,我们可以帮助您找到问题。
  • 我在 PHP 客户端上运行。现在我只想知道这些技巧是怎么做的;]

标签: web-scraping simple-html-dom


【解决方案1】:

抓取整个网站

抓取动态内容需要您实际呈现页面。 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。

【讨论】:

  • 我已经知道这个解决方法,但我需要的是直接从 PHP 代码中获取某个站点的数据。
  • 直接从 PHP 代码获取是什么意思?你想真正获得网站的 PHP 源代码吗?
  • 我想知道是否可以使用与 SIMPLE_HTML_DOM 类类似的方式。
  • @Tetsu 我更新了我的答案,向您展示如何获取数据。但是如果没有澄清,我很难知道您要做什么。
  • 简单地说,我想从这个网站上删除内容:praktykiprawnicze.pl/#s=1>
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多