【发布时间】:2013-07-20 16:33:28
【问题描述】:
我正在处理一个名为GitHub 的机器人托管项目。我的项目的工作是从 xml 配置文件给出的 url 中获取媒体。xml 配置文件具有定义的格式,就像您在脚本目录中看到的那样。
我的问题如下。有两个参数:
- 一个表示网络链接深度的列表,根据列表项中的选择器(css选择器),我可以找到最终可能找到媒体的媒体url或子页面url。
- 包含子页面 url 的 arr。
简化示例如下:
node_list = {..., next = {..., next= null}};
url_arr = [urls];
我想迭代url arr中的所有项目,所以我这样做:
function fetch(url, node) {
if(node == null)
return ;
// here do something with http request
var req = http.get('www.google.com', function(res){
var data = '';
res.on('data', function(chunk) {
data += chunk;
}.on('end', function() {
// maybe here generate more new urls
// get another url_list
node = node.next;
fetch(url_new, node);
}
}
// here need to be run in sync
for (url in url_arr) {
fetch(url, node)
}
如你所见,如果使用异步 http 请求,它必须吃掉所有的系统资源。我无法控制这个过程。 那么有没有人有一个好主意来解决这个问题? 或者,nodejs 不是做这些工作的正确方法吗?
【问题讨论】:
标签: node.js web-crawler