zy-crawler
v1.0.5
Published
zy-crawler是一个基于Node.js的简单易用的爬虫工具
Downloads
2
Readme
zy-crawler
zy-crawler是一个基于Node.js的简单易用的爬虫工具,可以方便地获取指定网页的内容并进行自定义格式化处理。
安装
使用npm安装 zy-crawler:
npm install zy-crawler -s
API文档
Crawler(options)
构造函数,创建一个新的爬虫实例。
options
: 可选参数:headers
: HTTP 请求头,默认为空对象timeout
: 请求超时时间(毫秒),默认为 5000proxy
: 代理服务器地址,例如http://127.0.0.1:8080
,默认为空字符串 示例代码:
// 创建爬虫实例
const crawler = new Crawler({
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
},
timeout: 5000,
proxy: '',
});
crawler.fetch(url)
爬取指定单个网页的内容,并返回解析后的数据。
url
: 网页地址 返回值 Promise 对象,解析后的数据包括:url
: 网页地址data
: Cheerio 实例,解析后的 DOM 对象
示例代码:
// 爬取单个网页
(async () => {
try {
const {url, data} = await crawler.fetch('https://www.jianshu.com/');
const $ = data;
const result = {};
// 获取文章列表
const articleList = [];
$('.content').each((i, el) => {
const $el = $(el);
const article = {};
article.title = $el.find('.title').text();
article.abstract = $el.find('.abstract').text();
articleList.push(article);
});
result.articleList = articleList;
console.log(result);
} catch (err) {
console.error(err);
}
})();
// 成功响应:
{
articleList: [
{
title: '留白阅读408|《低风险创业》拥有更多秘密,是企业的护城河',
abstract: '\n' +
' 2023.02.01 大同 星期三 多云(-3℃/-18℃) (简书日更148天/总日更834天) 作为一个企业,能够把某一项的服务做到极致,变...\n' +
' '
},
{
title: '植物和它们的孩子',
abstract: '\n' +
' 文/肚子 近来女儿有事,茉莉的芭蕾舞学习,便由我和先生作陪。 于珠海大剧院艺术中心学各种特长的孩子们都有家长陪伴,有的几位家长前呼后拥,孩子俨然...\n' +
' '
}
]
}
crawler.fetchAll(urls)
爬取多个网页的内容,并返回解析后的数据。
urls
: 网页地址数组 返回值 Promise 对象,解析后的数据包括:url
: 网页地址数组data
: 包含解析后的数据的数组,每个元素格式同 fetch 方法的返回值
示例代码:
// 爬取多个网页
(async () => {
try {
const {url, data} = await crawler.fetchAll([
'https://juejin.cn/',
'https://www.jianshu.com/',
]);
const result = {};
const articleList = [];
for (const resultElement of data) {
const $ = resultElement.data;
if (resultElement.url === 'https://juejin.cn/') {
$('.item').each((i, el) => {
console.log($(el))
const $el = $(el);
const article = {};
article.title = $el.find('.title').text();
article.abstract = $el.find('.description').text();
articleList.push(article);
});
} else {
$('.content').each((i, el) => {
const $el = $(el);
const article = {};
article.title = $el.find('.title').text();
article.abstract = $el.find('.abstract').text();
articleList.push(article);
});
}
}
result.articleList = articleList;
console.log(result);
} catch (err) {
console.error(err);
}
})();
自定义格式化处理 format
crawler.fetch(url,format)
使用示例:
// 爬取网页并进行数据格式化
(async () => {
try {
const result = await crawler.fetch('https://www.baidu.com', ($, response) => {
const title = $('title').text();
const statusCode = response.statusCode;
return {title, statusCode};
});
console.log(result);
} catch (err) {
console.error(err);
}
})();
完整示例
const Crawler = require('zy-crawler');
// 创建爬虫实例
const crawler = new Crawler({
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
},
timeout: 5000,
proxy: '',
});
// 爬取单个网页
(async () => {
try {
const result = await crawler.fetch('https://www.example.com');
console.log(result);
} catch (err) {
console.error(err);
}
})();
// 爬取多个网页
(async () => {
try {
const result = await crawler.fetchAll([
'https://www.example.com/page1',
'https://www.example.com/page2',
'https://www.example.com/page3',
]);
console.log(result);
} catch (err) {
console.error(err);
}
})();
自定义格式化处理
默认情况下,本插件会返回 cheerio 对象,即可以直接进行 jQuery 风格的 DOM 操作。
如果需要对返回结果进行自定义格式化处理,可以在调用 fetch 或 fetchAll 方法时传入一个格式化函数,例如:
const Crawler = require('zy-crawler');
const crawler = new Crawler();
// 定义格式化函数
const format = ($, response) => {
const title = $('title').text();
const content = $('#content').text();
const url = response.request.href;
return {title, content, url};
};
// 爬取单个网页并进行格式化处理
(async () => {
try {
const result = await crawler.fetch('https://www.example.com', format);
console.log(result);
} catch (err) {
console.error(err);
}
})();
// 爬取多个网页并进行格式化处理
(async () => {
try {
const result = await crawler.fetchAll([
'https://www.example.com/page1',
'https://www.example.com/page2',
'https://www.example.com/page3',
], format);
console.log(result);
} catch (err) {
console.error(err);
}
})();
贡献
欢迎对zy-crawler进行贡献!如果你发现了任何问题或者有任何想法或建议,请通过以下方式联系我:
- 在Gitee 上提出问题或请求。
- 提交一个Pull Request来改进代码。
- 通过电子邮件([email protected])联系。
请注意,在提交Pull Request之前,请确保你的代码与我们的代码库保持同步,并且你的代码通过了我们的测试,并且符合我们的代码质量和风格要求。
许可证
zy-crawler是根据MIT许可证开源的。详情请参阅LICENSE文件。
鸣谢
我们感谢以下开源软件项目:
- Node.js
- Cheerio
- request-promise