【发布时间】:2017-11-19 06:06:53
【问题描述】:
我使用 request 来获取一个页面,该页面在我使用cheerio 解析的表格中包含一堆锚标签(100)。
我获取每个锚标记的 href 属性值并请求每个页面。
然后我使用cheerio 解析每个页面。因此,新页面中 h1 标记中的文本成为我的文件名。
所以当我想使用 fs write 向这个特定的文件名写入一些内容时,我得到了
{ 错误:EISDIR:对目录进行非法操作,打开“/Users/dhruvprakash/Desktop/Projects/simple-node-scraper/samples/” 在错误(本机) 错误号:-21, 代码:'EISDIR', 系统调用:'打开', 路径:'/Users/dhruvprakash/Desktop/Projects/simple-node-scraper/samples/' }
但是,有些文件已创建,但绝大多数未创建。示例文件夹确实存在。除了这个错误,我还收到了一个 Cheerio 解析错误
/Users/dhruvprakash/Desktop/Projects/simple-node-scraper/node_modules/cheerio/lib/parse.js:69 var oldParent = node.parent ||节点根, ^
TypeError:无法读取未定义的属性“父级” 在 Function.exports.update (/Users/dhruvprakash/Desktop/Projects/simple-node-scraper/node_modules/cheerio/lib/parse.js:69:25) 在 module.exports (/Users/dhruvprakash/Desktop/Projects/simple-node-scraper/node_modules/cheerio/lib/parse.js:19:11) 在 Function.exports.load (/Users/dhruvprakash/Desktop/Projects/simple-node-scraper/node_modules/cheerio/lib/static.js:27:14) 在 Request._callback (/Users/dhruvprakash/Desktop/Projects/simple-node-scraper/scrape.js:19:24) 在 self.callback (/Users/dhruvprakash/Desktop/Projects/simple-node-scraper/node_modules/request/request.js:188:22) 在 emitOne (events.js:96:13) 在 Request.emit (events.js:188:7) 在 Request.onRequestError (/Users/dhruvprakash/Desktop/Projects/simple-node-scraper/node_modules/request/request.js:884:8) 在 emitOne (events.js:96:13) 在 ClientRequest.emit (events.js:188:7)
这是我的代码
request(seed, function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
$('td:first-child a').each(function(i, element){
var fullUrl = seed + element.attribs.href.substring(1);
request(fullUrl, function(error, response, body) {
var $$ = cheerio.load(body);
var title = $$('h1[property="dc:title"]').text();
fs.writeFile('/Users/dhruvprakash/Desktop/Projects/simple-node-scraper/samples/' + title, 'some random text', function (err) {
if (err) {
return console.log(err)
}
});
});
});
}
});
编辑:我根据罗伯特的建议添加了一些检查。现在我没有收到 EISDIR 错误,但是许多确实具有有效标题的文件仍未创建。解析问题仍然存在。
request(seed, function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
$('td:first-child a').each(function(i, element){
var fullUrl = seed + element.attribs.href.substring(1);
request(fullUrl, function(error, response, body) {
if(body === undefined || body === '' || body === null) {
console.log('wonky');
console.log(element.attribs.href.substring(1));// Every execution of the program prints something different
}
var $$ = cheerio.load(body);
var title = $$('h1[property="dc:title"]').text();
if(title !== '' && title !== undefined && title !== null) {
fs.writeFile('/Users/dhruvprakash/Desktop/Projects/simple-node-scraper/samples/' + title, 'some random text', function (err) {
if (err) {
return console.log(err)
}
});
}
});
});
}
});
【问题讨论】:
标签: javascript node.js fs