Oma*_*awi 27 download wget recursive mime-types
如何下载完整的网站,但忽略所有二进制文件。
wget使用该-r标志具有此功能,但它可以下载所有内容,并且某些网站对于资源不足的机器来说太多了,并且由于我正在下载该网站的特定原因,它没有用。
这是我使用的命令行:(wget -P 20 -r -l 0 http://www.omardo.com/blog我自己的博客)
uno*_*nor 26
您可以指定允许的响应列表。不允许的文件名模式:
允许:
-A LIST
--accept LIST
Run Code Online (Sandbox Code Playgroud)
不允许:
-R LIST
--reject LIST
Run Code Online (Sandbox Code Playgroud)
LIST 是逗号分隔的文件名模式/扩展名列表。
您可以使用以下保留字符来指定模式:
*?[]例子:
-A png-R css-R avatar*.png如果文件没有扩展名。文件名没有您可以使用的模式,我猜您需要 MIME 类型解析(请参阅Lars Kotthoffs 回答)。
我尝试过一种完全不同的方法是使用Scrapy,但它有同样的问题!这是我解决它的方法:SO:Python Scrapy - 基于 mimetype 的过滤器以避免非文本文件下载?
解决方案是设置一个
Node.js代理并配置Scrapy通过环境变量使用它http_proxy。代理应该做的是:
- 从 Scrapy 获取 HTTP 请求并将其发送到正在爬取的服务器。然后它返回 Scrapy 的响应,即拦截所有 HTTP 流量。
- 对于二进制文件(基于您实施的启发式),它会
403 Forbidden向 Scrapy 发送错误并立即关闭请求/响应。这有助于节省时间、流量,并且 Scrapy 不会崩溃。实际有效的示例代理代码!
http.createServer(function(clientReq, clientRes) {
var options = {
host: clientReq.headers['host'],
port: 80,
path: clientReq.url,
method: clientReq.method,
headers: clientReq.headers
};
var fullUrl = clientReq.headers['host'] + clientReq.url;
var proxyReq = http.request(options, function(proxyRes) {
var contentType = proxyRes.headers['content-type'] || '';
if (!contentType.startsWith('text/')) {
proxyRes.destroy();
var httpForbidden = 403;
clientRes.writeHead(httpForbidden);
clientRes.write('Binary download is disabled.');
clientRes.end();
}
clientRes.writeHead(proxyRes.statusCode, proxyRes.headers);
proxyRes.pipe(clientRes);
});
proxyReq.on('error', function(e) {
console.log('problem with clientReq: ' + e.message);
});
proxyReq.end();
}).listen(8080);
Run Code Online (Sandbox Code Playgroud)