cli-scraper 的外表下其实是一个基于 Node 的网页爬虫库,开发初衷是希望能帮助大家更方便的开发自己的爬虫,以便在命令行中浏览静态网页内容。如果你和我一样,生活在命令行世界中,那它给了你又一个留下的理由。
p.s. 库名比较怪,因为它并非可以爬 命令行中的内容,或许 scraper-for-cli 会更好一些?命名不易啊!
全局安装后,要让 cli-scraper 开始工作,仅需如下三步:
- 运行
$ clis init hello.js这条命令,新建一个新的配置文件。 - 通过编写 CSS 选择条件,告诉 cli-scraper 如何定位到你希望从网页中提取的内容。
- 最后,运行
$ clis process hello.js。
话不多说,上
范例 - 访问 https://bing.com 并提取 logo 文本:
运行 init 命令生成配置文件 $ clis init bing.js
// 如下是完成后的配置文件,复制粘贴到你本地的 bing.js ,试试吧。 module.exports = { url: 'https://www.bing.com/', // 目标地址 process: function ({ $ }) { return $('.hp_sw_logo').text() // 选中目标元素,并提取其中文本 }, finally: function (res) { console.log(res + 'go :)') // 结果任你处置 } } 运行 process 命令开工 $ clis process bing.js
上面就是让 cli-scraper 工作的最小配置,你本地生成的默认配置文件中的属性更多,我会在随后的篇幅中对其逐一说明,在此之前,让我们再举一个 。
先假想一个场景,你想在命令行中查看最常去新闻网站的更新,不仅是新闻列表,还想知道每篇文章中的一些内容(譬如发布时间),你最终希望在命令行中看到的输出是 新闻标题 [at] 发表时间
范例 - 快速查看新闻网站更新:
运行 init 命令生成配置文件 $ clis init news.js
// // 如下是完成后的配置文件,复制粘贴到你本地的 news.js ,试试吧。 module.exports = { url: 'http://www.news.cn/world/index.htm', requestOptions: { timeout: 10000 // 如果 10 秒还未成功则放弃 }, randomUserAgent: true, // 在访问时随机伪装 user-agent printRequestUrl: true, randomWait: 5, // 每次请求随机间隔 1 到 5 秒 process: function ({ $ }) { return $('.firstPart ul.newList01 > li > a').map((i, el) => { return { articleUrl: $(el).prop('href'), title: $(el).text() } }) }, next: { key: 'articleUrl', // 新闻列表结果中的新闻文档链接健 process: function ({ $, prevRes }) { return Object.assign(prevRes, { // 合并列表和对应的文章结果 date: $('.h-news > .h-info > .h-time').text() }) } }, finally: function (res) { for (let item of res) { if (item.date) { console.log(`${item.title} [at] ${item.date}`) } } }, catch: function (err) { console.log(err) // 如果遇到异常,打印出来 } } 运行 process 命令开工 $ clis process news.js
