nodejs爬虫实战_实战nodejs写网络爬虫

自己是写.Net程序出身的,但是这个生态圈……不说了都是泪,一时兴起玩玩nodejs,想着拿什么练个笔,于是就准备复刻一下以前自己写的爬虫,自己一直在用的都是C#.Net写的Winform程序,nodejs正好解决了跨平台的问题。

网络上开源的爬虫类应用基本处于两强吧,python遥遥领先,java也有一席之地,python写的爬虫我是拒绝的,我就是饿死……也不用黑乎乎没有gui的程序,但是等等啊,nodejs也是么有界面的,可以用起web服务器形式,然后走本地浏览器,还有现在外面很火的nw.js和electron两大解决方案,都内置了Chromium内核浏览器,不过正准备动手的时候发现了Google Carlo,Google的这个项目解绑了浏览器,可以让程序调用系统中安装的Chrome,感觉很接近当年的IE核心的WebBrowser控件了有木有,而且还跨平台。

说说写爬虫本身吧,写爬虫其实真没什么难的,关键就是要在浏览器上把从登录到下载所做的一系列操作,记录好控制台上显示的关键的网络传输信息,包括请求的url地址、类型(GET、POST、HEAD等)、头部数据(Referer、Range等)、查询数据(a=b&c=d这样的),然后记录返回信息,对于登录来说,一般就是一次POST请求,注意重定向即可,登录之后保存cookie用于后续的访问。对于爬取和分析页面,按照不同的情况有不同的解决方案,一般对于非脚本生成的页面,直接抓取html然后进行解析,但是有些页面是用脚本动态生成的,你用程序爬取的代码和用浏览器打开的完全不同,这就需要你观察这个页面内有哪些请求,往往可以从一些json请求中获取最原始不需要解析就能获取的宝贵信息。最后没什么好说的啦,获取到资源的url就用力下载就行啦,注意有些大文件服务器会强制要求分块下载,设置请求头部的header中的Range信息即可。

回到nodejs平台,nodejs拥有不弱于python的三方类库,如果对飙的话估计要吵几天几夜,不过对于我们来说够用好用就行了,nodejs下http下载一般用request类库,解析网页用cheerio,这两个就足够了,我为了减少硬盘读写用了memorystream。代码库托管在github:https://github.com/wildwind3325/pied,可以用于爬取Pixiv、Inkbunny和Ex绅士网站的图片、动图、flash和漫画,虽然功能只有Winform版本的5%都不到……代码很简单,纯粹当示例了。

其实刚开始后端http请求我用的是SuperAgent,后来发现这个类库虽然年纪和request差不多,但是后端bug太多,遂弃用了。SuperAgent在遇到302重定向时居然直接抛异常,在请求ex绅士时不知什么原因总是404……

你可能感兴趣的:(nodejs爬虫实战)