Articles of 网页抓取

浏览器caching中的Zip文件

大家好 目前,我有一个NodeJS的Web应用程序在制作一个网站的数据抓取。 具体来说,这个Web应用程序为了下载它们而擦除图像。 例如,所有的图像永久链接都是从reddit的首页中截取的。 然后他们被发送到客户端单独下载。 我的问题是与网站我刮了可以有成千上万的图像。 如果将1000个以上的图像下载到下载文件夹,这会提供可怕的用户体验。 结果我有两个select。 A)下载到服务器上的临时文件夹。 压缩。 发送给客户端下载。 从服务器删除 B)将文件下载到浏览器caching。 压缩。 下载到指定的下载目录。 我的问题是, 选项B甚至可能吗? 我对整个过程相对比较陌生,我找不到任何东西来实际压缩浏览器caching中的文件。 我可以比较容易地实现选项A,但这需要大量的带宽,在DigitalOcean上我可以find大约5美元/每分钟的带宽。 然而,整个项目是一个学习经验,因此我希望能够pipe理浏览器caching中的文件。 我正在使用以下NPM模块: 的NodeJS performance Cheerio 请求 进一步更新 我遇到了一个名为jsZip的NPM插件: https ://stuk.github.io/jszip/ 但是,我并不知道它也可以在客户端实施。 这纯粹是我的错误。 这引出了一个有趣的WebStorage问题: https ://www.w3schools.com/html/html5_webstorage.asp 会话的最大存储大小是5MB 从这里我将尝试实现这个答案在这里: 你如何cachingJavaScript的图像到我当前的代码,并将更新这个答案与任何其他人面临这个问题的结果。

phantom.exit和.close在phantom.js中有什么区别?

如果我正在使用phantom.js进行networking抓取点击一些button,并链接什么是方便终止程序? http://phantomjs.org/api/webpage/method/close.html http://phantomjs.org/api/phantom/method/exit.html

自动化ajax生成的网站与噩梦

我使用恶梦来自动化一个网站。 到目前为止,这是非常棒的,但我注意到,当我想与dynamic加载的内容进行交互时,会遇到一些问题。 甚至有一种方法,等待一个元素出现在页面上.wait(#elementId) ,但它不适用于在飞行中生成的内容。 有人遇到过这个问题,或者你可能会推荐一些其他技术? 我喜欢的噩梦是,它实际上并不是无头的,通过与Electron的集成,它也有一个GUI,显示所做的一切。 我宁愿如果这是可能的。 编辑 为了更好地说明我的担忧,下面是我正在使用的代码,但抽象: 假设我想在https://www.google.com上进行search,但search表单是通过库dynamic生成的。 我的代码看起来像这样 vo(function* () { var nightmare = Nightmare({ show: true }); var search = yield nightmare .goto('https://google.com') .wait('input[name="search"]') .type('input[name="search"]', 'the term I am searching for') .click('#submitButton') .wait(2000) .evaluate(function () { return $('input[name="search"]').val(); }); yield nightmare.end(); return search; })(function (err, result) { if (err) return console.log(err); […]

发送keydown,在nightmare.js中键入按键

在nightmare.js中的types方法将文本分配给input控件的值属性。 由于这个实现keydown,keypress事件不会触发你正在试图抓取的页面上。 任何方式发送'types'后的keydown事件? 编辑1- 这是一个使用jQuery发送事件的例子, var Nightmare = require('nightmare'); var vo = require('vo'); var nightmare = Nightmare(); vo(run)(function(err, result) { if (err) throw err; }); function *run() { var title = yield nightmare .goto('http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes') .type('#txtChar','\n') .evaluate(function() { var e = $.Event( "keypress", { which: 13 } ); $('#txtChar').trigger(e); return "Key you pressed is : " […]

使用NodeJS从url下载大文件时,服务器崩溃

我试图从nodejs使用请求模块从url(需要login)下载一个文件(+ 200mb),但是当它完成下载时,服务器开始减速,直到崩溃或变得非常慢。 这是我目前的代码(它下载整个文件,但我的服务器最终崩溃): //Required modules var http = require('http'), url = require("url"), fs = require('fs'), request = require('request'), path = require("path"), events = require("events"), j = request.jar(), request = request.defaults({ jar : j }); // make te request login in with cookies console.log("downloading file :)"); request({ url:"http://example.com/", method:"POST", form:{u: "username",p: "password"} }, function(error,response,body){ setTimeout(function(){ request […]

图像刮板节点JS。 如何将callback函数发送到结果数组

我试图构build简单的应用程序来构buildimgparsing器,并开始使用库图像刮板( 节点图像刮板 )。 并面临一个问题。 问题是:我怎样才能得到最终的对象数组 scraper.scrape(function(image) { images_list.push(image); }) 诺言 – 不起作用,我试过在函数参数里面调用它也没给我结果。

请求NodeJS正确编码正文

我试图抓取一些网页的一些数据,我设法发布一个请求,并得到正确的数据。 问题是我得到如下的东西: “Kannst du bitte noch einmal … erz??hlen ,wie du w ?and h? hrend der Safari einen L??Wen verjagt hast?” 通常erzählen – während ,所以Ö,ß,Ü显示不正确。 这里是我的代码: var querystring = require('querystring'); var iconv = require('iconv-lite') var request = require('request'); var fs = require('fs'); var writer = fs.createWriteStream('outputBodyutf8String.html'); var form = { id:'2974', opt1:'', opt2:'30', ref:'A1', tid:'157', […]

为什么“基地”标记是防止jsdom.env工作?

更新: 我发现页面中使用的标记“base”,我没有运行jQuery。如果网站包含该标记,jsdom将不起作用。 虽然我不知道为什么。 <base href="http://bbs.18183.com/" /> 为了validation这一点,我创build了一个全新的HTML文件,并放入一个里面,jsdom然后失败。 我目前在玩Node.js,在阅读了如何使用Node.js和jQuery来抓取网页之后,我决定为我创build一个。 所以我安装了express,jsdom和很多东西,发现抓取网页真的很方便。 但后来我发现了一个奇怪的情况,某个特定的页面不能被抓取,而是提示错误如下: var title = $('title').text(); ^ TypeError: undefined is not a function at H:\animalwar\personal\node\getter\app.js:82:23 at exports.env.exports.jsdom.env.scriptComplete (H:\animalwar\personal\node\ getter\node_modules\jsdom\lib\jsdom.js:207:39) at process.startup.processNextTick.process._tickCallback (node.js:244:9) 这是我的代码: request({ url:'http://bbs.18183.com/'}, function (err, response, body) { if(err && response.statusCode !== 200){ console.log('Connection Failure! Fuck GFW'); res.end('Connection Failure! Fuck GFW'); return; } jsdom.env({ html: […]

Web在Cheerio中抓取HTML表格

我有一个networking抓取项目的问题。 这里是我需要刮的页面示例: <table style="position…"> <thead>..</thead> <tbody id="leaderboard_body"> <tr bgcolor="#155555">..</tr> <tr bgcolor="#155555">..</tr> <tr bgcolor="#155555">..</tr> … </tbody> </table> 有关更多详细信息,请参阅以下页面: 世界排行榜 我想访问tr标签内的信息,但我无法实现。 我不能用简单的代码findtbody标签,就像这样,我不知道为什么: var cheerio = require("cheerio"); var url = "http://www.dota2.com/leaderboards/?l=french#europe"; var http = require("http"); // Utility function that downloads a URL and invokes // callback with the data. function download(url, callback) { http.get(url, function(res) { var data […]

刮Node Nodejs

我想用Nodejs来刮页面“ https://www.ukr.net/ua/news/sport.html ”。 我正尝试使用'request'npm模块进行基本的获取请求,例如: const inspect = require('eyespect').inspector(); const request = require('request'); const url = 'https://www.ukr.net/news/dat/sport/2/'; const options = { method: 'get', json: true, url: url }; request(options, (err, res, body) => { if (err) { inspect(err, 'error posting json'); return } const headers = res.headers; const statusCode = res.statusCode; inspect(headers, 'headers'); inspect(statusCode, 'statusCode'); inspect(body, […]