Tag: 网页抓取

对大文件上JSON输出的node.js刮取器的控制stream程的改进

我是新来的Node.js的asynchronous控制stream,我的刮板工作,但我不禁想到,必须有一个更优化(优雅?)的方式做到这一点,我打开使用其他节点库。 进一步来说: 我觉得目前的控制stream程(所有的callback)都很难理解,但也许是因为这对我来说是新的。 似乎有几个库控制stream量,我应该使用它? 最初,我的代码首先完成了所有request ,parsing并保存所有records = [] ,而不是处理将所有内容写入文件。 我在这里改变了代码,这样它会为for循环中的每个loggingrequest – parse – append ,我想确认这种方法对于大量的请求是否更好。 以JSON格式写入logging引起了一些痛苦,目前我必须调用startStep来追加[ first,然后使用(flag? function(){flag = false; return "";}() : ",")来决定是否是第一条logging,如果不是先追加逗号,则追加所有logging,最后追加] 。 再次,我很好奇是否有更好的方法来做到这一点。 为了迭代,我在全局范围声明了这个列表,并且使用list.shift()遍历下一个项目,现在看起来好了,但是我认为这会导致大规模的副作用。 我的直觉是我应该通过这个数组作为一个参数。 再次,我想在这一点上得到确认。 var fs = require('fs'); var request = require("request"); var cheerio = require("cheerio"); function appendFile(_input, callback){ fs.appendFile("./TED/alltalk3.json", _input, function(err){ if(err){ console.log("input is" + _input + "error is […]

为什么Promise中的承诺仍然悬而未决?

这是我重组我的代码,以正确使用承诺。 整个程序是一个基本的webscraper。 这个挑战是试图确保lastStep可以访问每个页面的HTML和URL,所以我试图在nextStep()返回一个对象。 我是控制台日志logging的HTML,它被正确地返回,但由于某种原因,承诺被logging如下: Promise { <pending> } 。 为什么会发生这种情况,我该如何解决? 谢谢! //Modules being used: var cheerio = require('cheerio'); var json2csv = require('json2csv'); var request = require('request'); var moment = require('moment'); var fs = require('fs'); //harcoded url var url = 'http://shirts4mike.com/'; //url for tshirt pages var urlSet = new Set(); var remainder; var tshirtArray = []; […]

在使用http.request时,Nodejs性能如何扩展?

我正在编写一个大量使用http.request方法的应用程序。 特别是,我发现同时发送16+〜30kb的请求, 真的让一个512MB RAM机器上的一个Nodejs实例陷入困境。 我想知道这是否是预期的,或者如果Nodejs只是出站请求的错误平台。

Nodejs在JavaScript加载值之后刮取网站

可能是nodejs / jsdom的一个新手问题 我正在尝试使用node.js刮一个网站。 我正在使用jsdom和jquery来获取HTML和parsing所需的东西。 但是,不知何故,我得到的价值不是网站上显示的价值。 基本上这些值是dynamic改变的JavaScript,我想这些值。 我使用nodejs / jsdom进行抓取的所有原因是,js将被执行,并在事件发生后获取值。 有没有什么方法可以告诉jsdom等待JavaScript执行? 还是我有这个全错了? 我在这个问题上search了很多。

模块请求如何正确检索重音字符?

我正在使用: 模块:请求 – 简化的HTTP请求方法来刮擦重音字符的网页á é ó ú ê ã等 我已经试过encoding: utf-8没有成功。 结果中我仍然得到这个字符。 request.get({ uri: url, encoding: 'utf-8' // … 有没有任何configuration来解决它? 我不知道这是不是一个问题,但是我为这个模块填了一个 。 还没有答案。 :/