让命令行生活更丰富些~ cli-scraper - V2EX
爱意满满的作品展示区。
j1wu

让命令行生活更丰富些~ cli-scraper

  •  1
     
  •   j1wu
    j1wu Nov 17, 2017 3449 views
    This topic created in 3102 days ago, the information mentioned may be changed or developed.

    cli-scraper 的外表下其实是一个基于 Node 的网页爬虫库,开发初衷是希望能帮助大家更方便的开发自己的爬虫,以便在命令行中浏览静态网页内容。如果你和我一样,生活在命令行世界中,那它给了你又一个留下的理由。

    p.s. 库名比较怪,因为它并非可以爬 命令行中的内容,或许 scraper-for-cli 会更好一些?命名不易啊!

    全局安装后,要让 cli-scraper 开始工作,仅需如下三步:

    1. 运行 $ clis init hello.js 这条命令,新建一个新的配置文件。
    2. 通过编写 CSS 选择条件,告诉 cli-scraper 如何定位到你希望从网页中提取的内容。
    3. 最后,运行 $ 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

    配置详解请参见 Github

    4 replies    2017-11-18 17:54:34 +08:00
    tedd
        1
    tedd  
       Nov 17, 2017
    这个可以有! Orz
    Charkey
        2
    Charkey  
       Nov 17, 2017
    厉害啦,膜拜一下
    gap
        3
    gap  
       Nov 18, 2017
    支持 ajax 动态加载的内容吗?
    j1wu
        4
    j1wu  
    OP
       Nov 18, 2017 via iPhone
    @gap 计划在下个版本中加入。
    About     Help     Advertise     Blog     API     FAQ     Solana     913 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 22:25 PVG 06:25 LAX 15:25 JFK 18:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86