# crawler **Repository Path**: miss-tree/crawler ## Basic Information - **Project Name**: crawler - **Description**: node 的简单爬虫 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-18 - **Last Updated**: 2025-03-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 基于nodejs的爬虫 #### 1. 安装依赖 ``` npm install axios cheerio dotenv p-limit puppeteer -S ``` - axios: 用于发送HTTP请求。 - cheerio: 用于解析HTML文档。 - dotenv: 用于加载环境变量。 - p-limit: 用于控制并发请求的数量。 - puppeteer: 用于处理需要JavaScript渲染的页面。 ```javascript const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://example.com'); // 示例:获取页面标题 const title = await page.title(); console.log('Title:', title); await browser.close(); })(); ``` #### 变量控制 ```javascript require('dotenv').config(); console.log('API Key:', process.env.API_KEY); ``` #### 并发控制 ```javascript const pLimit = require('p-limit') const limit = pLimit(5) await Promise.all(links.map(link => limit(() => crawlPage(link)))) ``` #### 思路逻辑 - 递归爬取:从首页开始,提取所有链接,并递归爬取这些链接。 - 从首页开始,提取页面中的所有链接。 - 使用new URL(href, baseUrl).href将相对路径转换为绝对路径。 - 只爬取同一域名下的链接(通过startsWith(baseUrl)判断)。 - 去重:避免重复爬取相同的页面。 - 使用Set(visitedUrls)记录已访问的 URL,避免重复爬取。 - 并发控制:限制并发请求数量,避免对目标服务器造成过大压力。 - 使用p-limit限制并发请求数量,避免对目标服务器造成过大压力。 - 数据存储:将爬取的数据存储到文件或数据库中。 - 将爬取的数据存储到allData数组中。 - 最后将数据保存到data.json文件中。 - 错误处理:处理网络请求失败、超时等问题。 **请遵守法律和道德规范** 确保你的爬虫遵守目标网站的robots.txt文件和相关法律法规。