养一只Node.js爬虫溜达中国证券网

FVIPrecious 8年前
   <p style="text-align: center;"><img src="https://simg.open-open.com/show/d91bb6ef6e21572256d8269a1454ac18.jpg"></p>    <p>爬虫的世界如同武林,派别繁多,其中Python</p>    <p>一派简单易学,深受各位小伙伴的喜爱。现在做大数据(呵呵),不写几个爬虫都不好意思了,甚至数据分析R语言也被大牛们插上翅膀,开始在Web上溜达,寻觅着数据分析的原料。</p>    <p>先前我主要是用Python3做爬虫,主打的工具是request、Beautiful Soup和lxml。虽然Python有Scrapy这么成熟的框架,但是平时还是根据需求直接撸代码。后来在看 Node.js 文档时发现Node.js有http(s)模块,可以实现请求。此外还有与Python中类似的request。所以用Node.js做爬虫也是比较便捷的。至于关心Node.js <strong>VS</strong> Python的小伙伴,可以自行百度或者谷歌。</p>    <p>谷歌了一下,发现有部分零散的材料在讲Node.js爬虫, <strong>不过代码风格和工具比较混杂</strong> :有的写function,有的写箭头函数;有的是处处皆为var,有的是用let和const。主要原因是Node.js是JavaScript运行环境,JavaScript作为有活力的语言,一直在修订和完善标准 ECMAScript 。从2015年开始,基本上市每年都出一个版本ECMAScript。此外,Node.js自己也是一个 版本帝 。</p>    <p>=====================================================================</p>    <p>这次使用的工具:</p>    <pre>  Win10 64bit   Visual Studio Code 1.9.0  Node.js7.5.0</pre>    <p>用来演示的是上海证券报的官方网站 <a href="/misc/goto?guid=4959736514142312372" rel="nofollow,noindex"> http://www. cnstock.com/ </a> 。 <strong>本次演示仅供学习,没有其他不良意图。</strong></p>    <p>======================================================================</p>    <p>简单的爬虫流程可以总结为: <strong>发送</strong> 请求-- <strong>获取</strong> 网页-- <strong>提取</strong> 信息-- <strong>保存</strong> 信息-- <strong>分析</strong> 数据-- <strong>报告</strong> 结论。</p>    <p>首先,我们来看一下最简单的环节。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/c24747d41804e9091e40709579d93ae9.png"></p>    <p>这里演示的主要是发送请求和读取网页。这个代码与Python基本上差不多。几行代码就实现了读取整个网站的首页信息。Node.js默认是utf8编码,这个编码比较通用,遇到gbk编码的网页需要另行处理。因为 <a href="/misc/goto?guid=4959736514142312372" rel="nofollow,noindex"> http://www. cnstock.com/ </a> 采用的是http协议,所采用Node.js的http模块,如果网站是https协议,那么相应的采用https模块。这两个模块都是Node.js的自带模块。不过要是采用第三方模块request就不用担心网站是http还是https,request都可以处理。</p>    <p>---------------------------------------------------------------------------------------------------------------------------</p>    <p>上面只是直接读取网页信息,并没有对网页信息进行解析,解析之后就可以抓取自己关心的数据了。这里引入一个第三方包cheerio,这个包在功能上类似于Python中的lxml和BS。</p>    <p>这里主要演示几个常用的功能。</p>    <p>如何清除H5、CSS、JS的标签信息,仅仅保留网页文本信息?</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/3d86b0ecc084cffc1fda7adc1f044185.png"></p>    <p>上面的信息看起仍然有点乱,如何去除空白符?直接保留关心的信息,这样方便做进一步分析,如文本分析。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/ee38b0f7e35b8fb40a6c45f4b028c001.png"></p>    <p>上面的处理用力过猛了。那么如何只是清除多余的空格?</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/6a357782860d79145e45bfe6ebea8b1b.png"></p>    <p>上面演示的是直接对整个页面的信息处理。那么如何提取我们关心的信息呢?</p>    <p>假设我们要提取“上证快讯”的信息。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/6b7a9944fc3f914ffe230c45eaee8b31.png"></p>    <p>具体Node.js代码如下。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/eabfaa7b3a78a98669483fd4d0af333a.png"></p>    <p>主要是通过标签和属性值进行定位的。具体如下图所示。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/8096918888a5795564ec8188f0d4ee4b.png"></p>    <p>看完了“上证快讯”, 我们来看一下有哪些“研究报告”?</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/8290119ccb49cab392660d0c8b116039.png"></p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/94e1908a9c8a3ee15a5d98dc270d8e51.png"></p>    <p>---------------------------------------------------------------------------------------------------------------------------</p>    <p>网站还有一个搜索功能。这就让Node.js爬虫去溜达一下。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/0df21360ec7d2c8b51f56c325bc50ee1.png"></p>    <p>距离两会还有一段时间,但是资本市场已经闻会而动了。一起来看看有哪些热点新闻。这里引入了一个新的模块querystring,主要是构造一个新的url。当然也可以用url模块来构造。这里的keyword就是我们关心的关键词,当然也可以设置为其他的关键词。t取值为1表示检索新闻,取值为0表示检索全部网页。如果想知道新闻链接和新闻时间,直接增加一行代码即可。</p>    <pre>  console.info($('p.link').text());</pre>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/2a57883b685d558cd87aac6deb34aff7.png"></p>    <p>=====================================================================</p>    <p>前面提到简单的爬虫流程可以总结为: <strong>发送请求--获取网页--提取信息--保存信息</strong> --分析数据--报告结论。</p>    <p>这里引入一个新的第三方包request,同时引入Node.js自带模块fs。这里演示一个简单完整的小爬虫。</p>    <p>上代码。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/417e95e45b6fd20fd5e1bae77f9affee.png"></p>    <p>上图的代码主要实现了 <strong>打印</strong> 要抓取的信息、 <strong>保存</strong> 要抓取的信息、 <strong>保存</strong> 整个网页。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/65fe98d6312aca21251ea0e3114f65a4.png"></p>    <p>======================================================================</p>    <p>简言之,在VSC中养一只Node.js爬虫,溜达一下资本市场信息,别有一番趣味。</p>    <p> </p>    <p>来自:https://zhuanlan.zhihu.com/p/25145607</p>    <p> </p>