1 Star 0 Fork 0

ZHOUYI / ZY.Crawler Node.js实现爬虫工具

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

zy-crawler

zy-crawler是一个基于Node.js的简单易用的爬虫工具,可以方便地获取指定网页的内容并进行自定义格式化处理。

star fork

安装

使用npm安装 zy-crawler:

npm install zy-crawler -s

API文档

Crawler(options) 构造函数,创建一个新的爬虫实例。

  • options: 可选参数:
    • headers : HTTP 请求头,默认为空对象
    • timeout : 请求超时时间(毫秒),默认为 5000
    • proxy : 代理服务器地址,例如 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来改进代码。
  • 通过电子邮件(1840354092@qq.com)联系。

请注意,在提交Pull Request之前,请确保你的代码与我们的代码库保持同步,并且你的代码通过了我们的测试,并且符合我们的代码质量和风格要求。

许可证

zy-crawler是根据MIT许可证开源的。详情请参阅LICENSE文件。

鸣谢

我们感谢以下开源软件项目:

  • Node.js
  • Cheerio
  • request-promise
MIT License Copyright (c) 2023 周Y Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

zy-crawler是一个基于Node.js的简单易用的爬虫工具,可以方便地获取指定网页的内容并进行自定义格式化处理 展开 收起
JavaScript
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
JavaScript
1
https://gitee.com/Z568_568/ZY.Crawler.git
git@gitee.com:Z568_568/ZY.Crawler.git
Z568_568
ZY.Crawler
ZY.Crawler Node.js实现爬虫工具
master

搜索帮助