【问题标题】:How to scrape websites when cURL and allow_url_fopen is disabled禁用 cURL 和 allow_url_fopen 时如何抓取网站
【发布时间】:2011-04-22 07:00:11
【问题描述】:

我知道关于 PHP 网页抓取工具的问题已经被问过很多次了,使用这个,我发现了 SimpleHTMLDOM。在我的本地服务器上无缝工作后,我将所有内容上传到我的在线服务器,却发现有些东西不能正常工作。快速浏览常见问题解答将我带到this。我目前正在使用免费托管服务,因此请编辑任何 php.ini 设置。因此,使用常见问题解答的建议,我尝试使用 cURL,却发现这也被我的托管服务关闭了。是否有任何其他简单的解决方案可以在不使用 cURL 或 SimpleHTMLDOM 的情况下抓取另一个网页的内容?

【问题讨论】:

    标签: php web-scraping


    【解决方案1】:

    如果 cURLallow_url_fopen 未启用,您可以尝试通过以下方式获取内容

    • fsockopen — 打开 Internet 或 Unix 域套接字连接

    换句话说,您必须手动执行 HTTP 请求。请参阅手册中的示例以了解如何执行 GET 请求。然后可以进一步处理返回的内容。如果启用了套接字,您还可以使用任何使用它们的第三方库,例如 Zend_Http_Client

    在旁注中,查看 Best Methods to Parse HTML 了解 SimpleHTMLDom 的替代方案。

    【讨论】:

    • +1 不知道你可以使用 fsockopen,即使 allow_url_fopen 被禁止。
    【解决方案2】:

    cURL 是一个特殊的 API。它不是通常被认为是 http 库,而是用于 FTP、SFTP、SCP、HTTP PUT、SMTP、TELNET 等的通用数据传输库。如果你只想使用 HTTP,有一个对应的PEAR library for that。或者检查您的 PHP 版本是否启用了官方的http extension。 对于抓取尝试phpQueryquerypath。两者都带有内置的 http 支持。

    【讨论】:

    • 我认为 querypath 使用了 DOM 的加载工具,并且 afaik 依赖于 allow_url_fopen。另一方面,phpquery 使用Zend_Http_Client,所以这可能是一个选项。 PEAR 库也是一个不错的选择。这是在fsockopen 之上的一个实现。
    【解决方案3】:

    allow_url_fopen 设置为false 时,这是一种抓取图像的简单方法,无需学习深奥的工具。

    在您的开发环境中创建一个网页,以加载您正在抓取的所有图像。然后,您可以使用浏览器保存图像。 File -> "Save Page As".

    如果您需要一次性解决方案从将allow_url_fopen 设置为0 的远程服务器下载一堆图像,这将非常方便。

    file_get_contentscurl 失败后,这对我有用。

    【讨论】:

      【解决方案4】:

      file_get_contents() 是最简单的抓取页面的方法,无需安装额外的库。

      【讨论】:

      • 那是same answer as Martin's above。除非您自己的答案确实添加了新内容,否则我们鼓励您对原始答案进行投票而不是重复它们(尤其是当它们不适用于像这种情况下的 OP 问题时)。
      • file_get_contents() 不是一个选项。
      猜你喜欢
      • 1970-01-01
      • 2012-03-09
      • 2015-09-14
      • 2014-02-12
      • 2015-03-30
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多