爬取天气没问题,爬取自己学校就出错了,这是怎么回事呢?
萌新求解答
E:\frontend\node>node index.js
start
start
events.js:180
throw er; // Unhandled 'error' event
^
Error: Invalid URI "/Content/Logo/logo_20170512104757535.PNG"
at Request.init (E:\frontend\node\node_modules\request\request.js:273:31)
at new Request (E:\frontend\node\node_modules\request\request.js:127:8)
at request (E:\frontend\node\node_modules\request\index.js:53:10)
at downLoad (E:\frontend\node\index.js:20:7)
at Node.<anonymous> (E:\frontend\node\analyze.js:6:9)
at initialize.exports.each (E:\frontend\node\node_modules\cheerio\lib\api\traversing.js:300:24)
at Object.findImg (E:\frontend\node\analyze.js:4:14)
at Request._callback (E:\frontend\node\index.js:12:21)
at Request.self.callback (E:\frontend\node\node_modules\request\request.js:185:22)
at Request.emit (events.js:203:13)
Emitted 'error' event at:
at Request.init (E:\frontend\node\node_modules\request\request.js:273:17)
at new Request (E:\frontend\node\node_modules\request\request.js:127:8)
[... lines matching original stack trace ...]
at Request.emit (events.js:203:13)
以下回答引用自chatGpt, 有用的话,请采纳哇!!!
你的问题是404图片没有捕获错误。
在Node.js中进行网络爬虫时,有时会出现图片404错误,这时可以使用try-catch语句来捕获错误并处理。以下是一个示例代码:
const http = require('http');
const fs = require('fs');
const request = require('request');
// 需要爬取的图片URL
const imgUrl = 'http://example.com/image.jpg';
// 发送请求
request.head(imgUrl, function (err, res, body) {
try {
// 如果请求失败,则抛出错误
if (err || res.statusCode !== 200) {
throw new Error('Image not found');
}
// 如果请求成功,则继续下载图片
request(imgUrl).pipe(fs.createWriteStream('image.jpg'));
} catch (err) {
// 捕获错误并进行处理
console.error(err);
}
});
在上面的代码中,我们首先使用request.head()方法发送一个HEAD请求以获取图片的元数据,然后使用try-catch语句来捕获错误。如果请求失败,则抛出一个自定义的错误,并在catch块中打印错误消息。如果请求成功,则继续使用request()方法下载图片。
请注意,这只是一个简单的示例代码,您需要根据自己的具体需求来编写更完善的错误处理代码。此外,还应该注意遵守网站的爬取规则,以避免被封禁或触发反爬虫机制。