我在Ubuntu 12.04上使用Node v0.10.11。我无法弄清楚我缺少什么来使URL流与请求模块一起工作。 该程序试图访问邮件列表站点,查找每个月的下载链接,然后下载每个月的页面。
Mikael的自述文件说“第一个参数可以是url或options对象。唯一需要的选项是URI,其他所有选项都是可选的。 uri || url - 来自url.parse()的完全限定的uri或解析的url对象“
如果我致电url.parse(www.targeturl.com)
,我会
Error: options.uri is a required argument
如果我不使用url.parse
,我会
Error: Invalid URI "www.freelists.org/archive/si-list/06-2013"
(此链接在我的浏览器中运行良好)
我已将代码减少到42行。欢迎任何建议
var request = require('request'),
url = require('url'),
stream = require('stream'),
cheerio = require('cheerio'), // a reduced jQuery style DOM library
Transform = require('stream').Transform
var DomStripStream = function(target) {
this.target = target;
stream.Transform.call(this,{objectMode: true});
}
DomStripStream.prototype = Object.create(
Transform.prototype, {constructor: {value: DomStripStream}}
)
DomStripStream.prototype.write = function () {
this._transform.apply(this, arguments);
};
DomStripStream.prototype.end = function () {
this._transform.apply(this, arguments);
this.emit("end");
};
DomStripStream.prototype._transform = function(chunk, encoding, callback) {
chunk = chunk ? chunk.toString() : "";
$ = cheerio.load(chunk);
domLinks = $(this.target);
$(domLinks).each(function (i, link) {
currLink = 'www.freelists.org' + $(link).attr('href')
// currLink = url.parse(currLink)
request(currLink, function (error, response, body) {
console.log(error);
})
});
}
var fs = require("fs"),
output = fs.createWriteStream("out.txt"),
mainPage = new DomStripStream('td a')
request('http://www.freelists.org/archive/si-list').
pipe(mainPage).
pipe(output);
答案 0 :(得分:13)
在网址
中添加http://或https://