下面是基于Node.js的HTTP小爬虫的完整攻略。
什么是小爬虫?
小爬虫是指相对于大型搜索引擎的全网爬虫而言,实现爬取网站数据的一种较小规模的爬虫程序。小爬虫一般是为了实现对某个特定网站或特定需求的数据抓取而存在。
Node.js中的HTTP模块
Node.js的核心模块之一是HTTP模块。它提供了一系列API,用于处理HTTP请求、响应和连接。我们可以使用HTTP模块来构建一个简单的小爬虫。
const http = require('http');
http.get('http://example.com', (res) => {
res.on('data', (chunk) => {
console.log(chunk.toString());
});
});
以上代码执行时,将会发起一个HTTP GET请求,去请求http://example.com这个网站的内容,并把响应数据输出到控制台。
实现一个基本的爬虫
我们来构建一个小爬虫,爬取一个网站的数据。该网站为sha.mmaria.website,一个基于React框架搭建的静态博客网站,里面记录了作者所有的博客文章。我们要爬取的数据是博客标题和发布时间,存储为JSON格式。
const http = require('http');
const cheerio = require('cheerio');
let url = 'http://sha.mmaria.website';
http.get(url, (res) => {
let html = '';
res.on('data', (chunk) => {
html += chunk;
});
res.on('end', () => {
let $ = cheerio.load(html);
let articles = [];
$('li').each((index, elem) => {
let title = $(elem).find('h2').text().trim();
let date = $(elem).find('.date').text().trim();
articles.push({title, date});
});
console.log(articles);
});
});
以上代码爬取了sha.mmaria.website网站的主页数据,使用了一个叫做Cheerio的模块,它是一个轻量级的HTML解析器,可以像jQuery一样操作和选择DOM元素,方便我们从HTML中提取数据。
Cheerio模块的使用方式非常简单,只需要把HTML传入它的load函数即可。然后我们就可以使用jQuery的方式,通过选择器和遍历DOM元素来提取我们需要的数据了。
爬取多页数据
如果我们要爬取多页的数据,那么可以将爬取一个网页的代码封装成一个函数,通过递归的方式依次爬取每个网页的数据。
const http = require('http');
const cheerio = require('cheerio');
let baseUrl = 'http://sha.mmaria.website/page/';
let pageCount = 3;
let articles = [];
function getArticles(page) {
if (page > pageCount) {
console.log(articles);
return;
}
let url = baseUrl + page;
http.get(url, (res) => {
let html = '';
res.on('data', (chunk) => {
html += chunk;
});
res.on('end', () => {
let $ = cheerio.load(html);
$('li').each((index, elem) => {
let title = $(elem).find('h2').text().trim();
let date = $(elem).find('.date').text().trim();
articles.push({title, date});
});
getArticles(page + 1);
});
});
}
getArticles(1);
以上代码实现了爬取3页数据的功能,每页的数据保存在一个数组中,最终合并成一个大数组并输出到控制台。需要注意的是,在爬取多个页面时,需要使用递归的方式处理异步请求的顺序问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于node下的http小爬虫的示例代码 - Python技术站