在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
块,输出错误信息并继续执行后续代码。