Node.js 教程
Node.js 基础
Node.js 概述
Node.js 环境搭建
Node.js 基础语法
Node.js 模块
Node.js 异步编程
Node.js 核心模块
Node.js文件系统
Node.js路径模块(path)
Node.js的HTTP模块
Node.js的url模块
Node.js流模块(stream)
Node.js 常用工具与框架
npm 与包管理
Express 框架
数据库操作
Socket.io 与 WebSocket
Node.js 实战项目
Web 应用开发
API 开发
爬虫应用
自动化脚本
Node.js部署与优化
部署 Node.js 应用
Node.js性能优化
Node.js应用的安全性
Node.js 高级话题
Node.js中的设计模式
TypeScript 与 Node.js
GraphQL 与 API 开发
-
+
首页
爬虫应用
在 Node.js 中开发爬虫应用时,通常需要以下几个步骤:使用 HTTP 客户端发送请求获取网页内容,解析 HTML 提取所需的数据,然后将数据存储到数据库或其他存储媒介中。以下是一个使用 `axios` 和 `cheerio` 模块实现的简单爬虫应用示例。 ### **1. 依赖安装** ```bash npm install axios cheerio mongodb ``` ### **2. 爬虫代码示例** ```javascript const axios = require('axios'); // HTTP 客户端 const cheerio = require('cheerio'); // HTML 解析器 const MongoClient = require('mongodb').MongoClient; // MongoDB 驱动 const url = 'https://example.com'; // 目标 URL const dbUrl = 'mongodb://localhost:27017'; // MongoDB 连接字符串 const dbName = 'crawlerDB'; // 数据库名称 const collectionName = 'articles'; // 集合名称 // 步骤 1: 发送 HTTP 请求获取 HTML async function fetchData() { try { const response = await axios.get(url); return response.data; } catch (error) { console.error(`Error fetching data from ${url}:`, error); return null; } } // 步骤 2: 解析 HTML function parseHTML(html) { if (!html) return []; const $ = cheerio.load(html); const articles = []; // 假设目标页面有多个文章,每个文章的 HTML 结构如下: // <div class="article"> // <h2 class="title">Title</h2> // <p class="content">Content...</p> // </div> $('.article').each((index, element) => { const title = $(element).find('.title').text().trim(); const content = $(element).find('.content').text().trim(); articles.push({ title, content }); }); return articles; } // 步骤 3: 将数据存储到 MongoDB async function storeData(data) { try { const client = await MongoClient.connect(dbUrl, { useUnifiedTopology: true }); const db = client.db(dbName); const collection = db.collection(collectionName); await collection.insertMany(data); console.log(`Stored ${data.length} articles`); client.close(); } catch (error) { console.error('Error storing data:', error); } } // 主函数 async function main() { const html = await fetchData(); const articles = parseHTML(html); await storeData(articles); } main(); ``` ### **代码说明** 1. **HTTP 请求**: - 使用 `axios` 发送 GET 请求获取目标网页的 HTML 内容。 2. **HTML 解析**: - 使用 `cheerio` 加载 HTML 并解析。 - 通过选择器(如 `.article`)和 `text()` 方法提取所需数据。 3. **数据存储**: - 使用 MongoDB 作为存储数据库,通过 `MongoClient` 连接到 MongoDB。 - 将提取的数据存储到 `articles` 集合中。 ### **注意事项** 1. **合法性和伦理**: - 确保目标网站允许爬取(检查 `robots.txt` 文件)。 - 注意版权和隐私问题,避免爬取受保护的内容。 2. **网站反爬虫机制**: - 很多网站会采取反爬虫措施,如 IP 封禁、验证码等。 - 可以通过设置请求头、使用代理等方法应对。 3. **性能优化**: - 对于大型爬虫,可以采用并发控制、数据缓存等策略。 ### **扩展功能** - **并发控制**: ```javascript // 使用 async.mapLimit 控制并发数量 const async = require('async'); const urls = ['url1', 'url2', ...]; async.mapLimit(urls, 5, async (url, callback) => { try { const data = await fetchData(url); const articles = parseHTML(data); callback(null, articles); } catch (error) { callback(error); } }, (err, results) => { if (err) { console.error('Error in async map:', err); return; } const allArticles = results.flat(); storeData(allArticles); }); ``` - **数据验证和清理**: 在存储数据前,可以对数据进行验证和清理,确保数据质量。 通过以上步骤和代码示例,你可以构建一个简单的 Node.js 爬虫应用,实现从网页获取数据并存储到数据库的功能。
wwbang
2025年2月27日 10:40
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码