鼓捣phantomjs(二) node.js模块化集成

简介: 著作权所有:http://www.cnblogs.com/zeusro/  引用(爬虫)不给稿费的,切你jj 追忆似屎年华 在上一篇post(http://www.cnblogs.com/zeusro/p/4185196.html)里面,我留下了3个坑没有填平。

著作权所有:http://www.cnblogs.com/zeusro/ 

引用(爬虫)不给稿费的,切你jj

追忆似屎年华

在上一篇post(http://www.cnblogs.com/zeusro/p/4185196.html)里面,我留下了3个坑没有填平。

2模块化

加载到nodejs里面,用于批量采集。

方法:把变动的参数做成

3淘宝的反采集

4数据的持久化

其实呢,还有一个,就是中文编码的问题,

那么今天把其中2个解决了。持久化给个思路,反采集就算了,哥已经宣布弃坑了。

正文

模块化其实很简单。在采集模块(js)里面引入system就行了。

var system = require('system');
var url = system.args[1];
var filename = system.args[2];

第一个参数是我们运行的js,第二个参数开始才是我们真正用得到的。

phantomjs phantomcapture.js http://shop115235781.m.taobao.com/#list av

这样就简单完成了模块化。

那么在node那边,我们要做到的就是,要引用并运行这个模块。这里我用了node的child_process,每一个url开启一个子进程。

淘宝的反采集

这个才是我宣布弃坑的原因。我在每次调用waitfor超时之后都有去截屏处理的。而我开那么多个子进程捕获到的结果就是,要登录淘宝,还得输入验证码。。。要输入验证码,呵呵....

数据的持久化

楼主用SqlServer惯的。

node.js确实有连SqlServer的驱动(https://github.com/Azure/node-sqlserver),问题是那玩意我连接失败了。那个项目2年前最后一次提交代码。作者自己也说了,说是去放假了解决不了一些issue,其实看起来更像是弃坑的节奏。

那么我只能建议连芒果DB或者nosql了。

中文编码问题。

这个有人在私信里面问我。这个我其实一早就预料到了,因为之前在找资料的时候就有提到js的编码问题,这个是固有缺陷。解决这个问题,引入iconv-lite就行了。

这里,我使用了这玩意扩展了node的编码

// After this call all Node basic primitives will understand iconv-lite encodings.
iconv.extendNodeEncodings();

  然后在进程通信那里

var buf = new Buffer(data, 'win1251');
        buf.write(data, 'gbk');
        console.log(buf.toString('gbk'));

  这样就行了

代码

主进程node的代码如下

var colors = require('colors')
  , jsdom = require('jsdom').jsdom
  , async = require('async')
  , http = require('http')
  , fs = require('fs')
  , jquery = fs.readFileSync("jquery-1.10.2.min.js", "utf-8")
  , iconv = require('../node_modules/iconv-lite')
  , phantom = require('phantomjs');

// After this call all Node basic primitives will understand iconv-lite encodings.
iconv.extendNodeEncodings();

var count = 0;
console.log('主进程开启');
var startTime = new Date().getTime();
var urls = new Array(
    "http://shop100338207.m.taobao.com/#list",
    "http://shop68291879.m.taobao.com/#list",
    "http://shop115235781.m.taobao.com/#list",
    "http://shop10199638.m.taobao.com/#list",
   "http://shop67272667.m.taobao.com/#list",
     "http://shop109683760.m.taobao.com/#list",
   "http://shop33495993.m.taobao.com/#list",
    "http://shop58501945.m.taobao.com/#list",
   "http://shop62907168.m.taobao.com/#list",
  "http://shop59495864.m.taobao.com/#list",
   "http://shop60374631.m.taobao.com/#list"
    );
for (var i = 0; i < urls.length; i++) {
    console.log(("采集地址:" + urls[i]).red);
    capture(urls[i]);
}
function capture(url) {
    count++;
    var spawn = require('child_process').spawn,
    ls = spawn('phantomjs', ['phantomcapture.js', url, count]);


    ls.stdout.on('data', function (data) {
        var buf = new Buffer(data, 'win1251');
        buf.write(data, 'gbk');
        console.log(buf.toString('gbk'));
    });

    ls.stderr.on('data', function (data) {
        //console.log('stderr: ' + data);

    });

    ls.on('close', function (code) {
        if (code == 1) {
            console.log('child process异常结束。目标:' + url);
        }

    });

}

1在window平台上编译一些模块的时候要用到VS2010的MSbuild,我本来装2013的,但是不行。这货就是这么贱,要10版本的MSbuild,所以我只能老老实实去装个10版本了

  最后啰嗦一下,如果出现啥不是内部或外部命令之类的,那肯定是你打开方式不对,没有弄系统环境变量。

著作权所有:http://www.cnblogs.com/zeusro/ 

引用(爬虫)不给稿费的,切你jj

 

参考链接

Node.js中的child_process及進程通信

iconv-lite

NodeJS + PhantomJS 抓取页面信息以及截图

 

child_process.spawn 乱码?
从写 node.js 爬虫说起
Nodejs写一个简单爬虫

 

 

 

目录
相关文章
|
1月前
|
人工智能 JavaScript 前端开发
一段 JavaScript 代码,集成网站AI语音助手
根据本教程,只需通过白屏化的界面操作,即可快速构建一个专属的AI智能体。
|
5月前
|
JavaScript UED
js之模块化(2)
js之模块化(2)
|
6月前
|
JavaScript 前端开发 编译器
解锁JavaScript模块化编程新纪元:从CommonJS的基石到ES Modules的飞跃,探索代码组织的艺术与科学
【8月更文挑战第27天】随着Web应用复杂度的提升,JavaScript模块化编程变得至关重要,它能有效降低代码耦合度并提高项目可维护性及扩展性。从CommonJS到ES Modules,模块化标准经历了显著的发展。CommonJS最初专为服务器端设计,通过`require()`同步加载模块。而ES Modules作为官方标准,支持异步加载,更适合浏览器环境,并且能够进行静态分析以优化性能。这两种标准各有特色,但ES Modules凭借其更广泛的跨平台兼容性和现代语法逐渐成为主流。这一演进不仅标志着JavaScript模块化的成熟,也反映了整个JavaScript生态系统的不断完善。
68 3
|
3月前
|
前端开发 JavaScript 测试技术
React 中集成 Chart.js 图表库
本文介绍了如何在 React 项目中集成 Chart.js 创建动态图表,涵盖基础概念、安装步骤、代码示例及常见问题解决方法,帮助开发者轻松实现数据可视化。
75 11
|
3月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
65 2
|
5月前
|
JavaScript 前端开发 开发者
js之模块化(1)
js之模块化(1)
|
4月前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
110 1
|
5月前
|
JavaScript
Nodejs的模块化概述
详细解释Node.js的模块化概念,包括CommonJS规范、模块的引用、定义、标识,以及如何在Node.js中实现模块化,并通过示例代码展示了如何创建和使用模块,以及"module.exports"和"exports"的区别。
53 1
Nodejs的模块化概述
|
4月前
|
缓存 JavaScript 前端开发
Node.js模块化的基本概念和分类及使用方法
Node.js模块化的基本概念和分类及使用方法
71 0
|
5月前
|
前端开发 JavaScript 开发者
Express.js与前端框架的集成:React、Vue和Angular的示例与技巧
本文介绍了如何将简洁灵活的Node.js后端框架Express.js与三大流行前端框架——React、Vue及Angular进行集成,以提升开发效率与代码可维护性。文中提供了详细的示例代码和实用技巧,展示了如何利用Express.js处理路由和静态文件服务,同时在React、Vue和Angular中构建用户界面,帮助开发者快速掌握前后端分离的开发方法,实现高效、灵活的Web应用构建。
117 3

热门文章

最新文章