前言
在前端开发中,信息爬取是很常见的需求。但如何进行爬取呢?使用 JS-crawler
这个 npm 包可以帮助我们轻松地实现爬取操作。本文将对 JS-crawler
进行详细的使用教程。
什么是npm包?
在介绍 JS-crawler
这个 npm 包之前,首先需要了解什么是 npm 包。npm (Node Package Manager),全称Node包管理器,是一个基于Node.js的包管理工具。npm 可以方便地查找、安装和管理 Node.js 模块(也称为包)。
使用 npm 包可以大大提高我们的工作效率,省去了重复造轮子的时间。
什么是 JS-crawler?
JS-crawler
是一个 Node.js 爬虫模块,主要用于从网站和 DOM 中提取信息。
JS-crawler
可以用于自动抓取文本,链接、图片等。同时,支持异步回调,可进行更为复杂的爬取操作。
安装 JS-crawler
在使用 JS-crawler
之前,需要先安装它。使用 npm 命令进行安装:
npm install js-crawler
然后,就可以在项目中使用 JS-crawler
了。
使用JS-crawler
初始化JS-crawler
使用JS-crawler最基本的方式是初始化一个crawler对象,这可以通过require('js-crawler')
来实现。
const Crawler = require("js-crawler");
简单的JS-crawler示例
下面是一个简单的使用JS-crawler的例子。这个爬虫会访问URL:http://example.com,并抓取所有的文本,链接以及图片链接。
-- -------------------- ---- ------- ----- ------- - ---------------------- --- --------------------------- --- ---------------------------- -------- --------------- - ---------------------- -------------------------- ------------------------ ------------------------- ---
以上代码中,crawl
方法接受两个参数。第一个参数是需访问的URL,第二个参数是一个成功时的回调函数。回调函数可以进行更为进一步的操作,例如:提取网页内容,保存到数据库中等。
配置选项
JS-crawler
提供了许多配置选项,以便我们更灵活地使用。
- ignoreRelative:默认情况下,爬虫将爬行相对URL,可以将它设置为true进行更复杂的爬虫操作。
- **depth:**指定爬取的深度。深度是指页面的链接是否需要爬取。例如,如果深度为1,则只会爬取页面的链接,而不会深入进入重新爬取链接的页面。默认情况下,深度为1,但是可以设置最大深度(最大深度为5)。
- **maxConcurrency:**用于控制并发请求的数目,以避免服务器过载。默认值为10。
- **interval:**爬取请求之间的间隔(毫秒)。默认值为0。
- **timeout:**超时时间(毫秒)。默认值为30000。
- **retryCount:**重试次数。如果请求发生错误,请求将重试此次数。默认值为3。
- **userAgent:**HTTP User-Agent Header。使用默认值或填写自己的 User-Agent Header。
- **robotstxt:**指定是否应解析 robots.txt 文件。支持为 true 或 false。默认为 true。
- **allowDuplicates:**指定是否应抓取重复链接。如果设置为false,则不会抓取任何已访问过的链接。
const Crawler = require("js-crawler"); new Crawler().configure({ignoreRelative: false,depth:5, maxConcurrency: 5, interval: 3000}) .crawl("http://some-site.com", function onSuccess(page) { console.log("轮到页面:" + page.url); });
当然,你也可以设置多个配置项。例如:
const Crawler = require("js-crawler"); new Crawler().configure({ignoreRelative: false,depth:5, maxConcurrency: 5, interval: 3000}) .configure({ignoreRelative: true, depth: 3, maxConcurrency: 10}) .crawl("http://some-site.com", function onSuccess(page) { console.log("轮到页面:" + page.url); });
请求返回的数据
当页面成功请求时,JS-crawler
会返回一些有用的数据。以下是 JS-crawler
可以提供的数据:
- **page.url:**请求的URL
- **page.status:**HTTP 状态码。
- **page.content:**抓取到的HTML内容。
- **page.links:**包含所有链接和特定链接的数组。
- **page.images:**包含所有图像和特定图像的数组。
- **page.assets:**包含所有非链接/图像的属性。
- **page.error:**如果发生任何错误,例如网络错误,则设置为true。
- **page.elapsedTime:**耗时(毫秒)。
示例代码
下面是一个完整的 JS-crawler
示例代码,它会爬取 Zhihu 热榜前 5 的问题和答案。
-- -------------------- ---- ------- ----- ------- - ---------------------- ----- ------- - ------------------- --- --------------------------- -- --------------- --- -------------------------------------------------- -------- --------------- - ----- - - --------------------------- ----- ------ - ------------------------ --- ---- - - -- - - -- ---- - ------------------------------------ ---------------------------------------- ------------------------------ - ---
代码分析:
首先,我们引入 JS-crawler
和 cheerio
这两个 npm 包。其中 cheerio
主要用于解析 HTML 字符串,使我们能够像 jQuery 一样操作所选元素。
然后使用 new Crawler()
创建一个新的爬虫。使用 configure
方法配置选项。
在调用 crawl
方法时,我们指定了爬取的网址和成功时的回调函数。在此回调函数中,我们使用 cheerio 将 HTML 字符串解析为可操作的 DOM 元素,然后通过选择器获取所需的元素。最后,输出前五个问题和答案。
通过这个例子可以看到,使用 JS-crawler
可以轻松地实现爬虫操作。我们可以根据具体需求使用 JS-crawler
进行更进一步的操作。
总结
本文介绍了 npm 包 JS-crawler
的基础内容和用法,并提供了使用 JS-crawler
爬取网站信息的示例代码。希望读者可以在实践中更好地理解 JS-crawler
,并运用到实际开发中。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedcb4cb5cbfe1ea06125a6