在JavaScript中,进行异常处理的主要方法是使用try-catch
语句。当你在try
块中的代码出现错误时,程序会跳过剩余的代码,进入catch
块来处理错误。这对于爬虫来说非常重要,因为网络请求、解析HTML等操作可能会出现各种错误。
以下是一个简单的JavaScript爬虫示例,使用axios
库进行HTTP请求,并使用cheerio
库解析HTML。在这个示例中,我们将使用try-catch
语句来处理异常:
const axios = require('axios');
const cheerio = require('cheerio');
async function fetchAndParse(url) {
try {
// 发起HTTP请求
const response = await axios.get(url);
// 解析HTML
const $ = cheerio.load(response.data);
// 在这里处理解析后的数据
// ...
} catch (error) {
// 处理异常
console.error(`Error fetching and parsing URL: ${url}`);
console.error(error);
}
}
// 调用函数
fetchAndParse('https://example.com');
在这个示例中,我们将HTTP请求和HTML解析操作放在try
块中。如果出现任何错误,程序将跳到catch
块,输出错误信息并继续执行后续代码。
除了使用try-catch
语句外,你还可以使用async/await
和Promise
来处理异步操作中的异常。例如,你可以使用Promise.all()
来并行执行多个请求,并在所有请求完成后处理结果:
const axios = require('axios');
const cheerio = require('cheerio');
async function fetchAndParse(urls) {
try {
// 并行执行多个HTTP请求
const responses = await Promise.all(urls.map(url => axios.get(url)));
// 解析HTML
const $ = cheerio.load('');
const results = [];
// 处理解析后的数据
responses.forEach((response, index) => {
const $ = cheerio.load(response.data);
// 在这里处理解析后的数据
// ...
results.push({ url: urls[index], data: $('selector').html() });
});
return results;
} catch (error) {
// 处理异常
console.error('Error fetching and parsing URLs');
console.error(error);
}
}
// 调用函数
fetchAndParse(['https://example.com', 'https://example.org']);
在这个示例中,我们使用Promise.all()
来并行执行多个HTTP请求。如果其中一个请求出现错误,程序将跳到catch
块,输出错误信息并继续执行后续代码。