php - 如何只加载 html(并跳过媒体文件)

标签 php http curl web-crawler

我正在优化我的简单网络爬虫(目前使用 PHP/curl_multi)。

目标是智能抓取整个网站,并跳过非 html 内容。我尝试使用 nobody,并且只发送 HEAD 请求,但这似乎并不适用于每个网站(某些服务器不支持 HEAD),导致 exec 暂停很长时间(有时比加载页面本身长得多)。

有没有其他方法可以在不下载全部内容的情况下获取页面类型,或者如果文件不是 html 则强制 CURL 放弃下载?

(编写我自己的 http 客户端不是一个选项,因为我打算稍后将 CURL 函数用作 cookie 和 ssl)。

最佳答案

我还没有尝试过,但我看到了 CURLOPT_PROGRESSFUNCTION。我敢打赌,您可以逐步阅读响应以查找 content-type header ,可能还有 curl_close () 句柄,如果您对正在下载的内容不感兴趣。

CURLOPT_PROGRESSFUNCTION     The name of a callback function
where the callback function takes three parameters. The first is the
cURL resource, the second is a file-descriptor resource, and the 
third is length. Return the string containing the data.

http://www.php.net/manual/en/function.curl-setopt.php

关于php - 如何只加载 html(并跳过媒体文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12101838/

相关文章:

php - 在 php 中使用 implode 更新数据

javascript - 发布到服务器时 $http 未定义

php - 通过 bash CURL 将变量发送到 php

php - 如何在输入页面自动打开模式弹出窗口

php - 静态变量 PHP 的问题

python - 如何用Django HTTP.Request处理,请求内容类型,查询参数

jquery - Windows 应用程序是否可以与网页交互?

php - 使用 curl_multi 从多个 URL 获取 HTTP 状态代码?

http - 为什么按主机名请求返回 1 个站点,但按 ip 请求返回另一个站点

PHP 数据库部署 git/capistrano