ZHYI-source / ZY.Crawler

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

zy-crawler

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

安装

使用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

About

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

License:MIT License


Languages

Language:JavaScript 100.0%