Tag: cheerio

刮cheerio.js,得到:错误:只能在暂停时执行操作

试图从这个网站刮取威士忌的名字,image_url和描述: https ://www.thewhiskyexchange.com/c/33/american-whiskey ? filter = true#productlist-filter using cheerio.js。 我想把这些信息转换成一个JSON对象数组来存储在我的MongoDB中。 无法显示整个网站的html,但这里是无序列表的相关基本结构的一部分: <body> <div class="siteWrapper"> <div class="wrapper"> <div class="products-wrapper"> <ul class="products-list"> <li> <a> <div class="product-content"> <div class="information"> <p class="name"> " Jack Daniel's Old No. 7" <span>Small Bottle</span> </p> </div> </div> </a> </li> <li></li> <li></li> etc. </all closing tags> 刚开始试图在<p class="name">得到威士忌的名字,没有任何来自<span>标签的文本,我在浏览器控制台中使用了这个jQuery代码,它正是我所需要的: $('ul.products-list > li').each(function(index) { const nameOnly […]

使用tinyreq / cheerio有没有办法绕过网站上的证书链?

我试图刮一个网站,我正在使用npm模块tinyreq / cheerio在此博客文章中注明 我想刮的网站使用TLS我遇到下面的错误: Error: self signed certificate in certificate chain at Error (native) at TLSSocket.<anonymous> (_tls_wrap.js:1092:38) at emitNone (events.js:86:13) at TLSSocket.emit (events.js:185:7) at TLSSocket._finishInit (_tls_wrap.js:610:8) at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:440:38) code: 'SELF_SIGNED_CERT_IN_CHAIN' 有没有办法我可以绕过这个节点? 或者我是否必须在脚本中包含实际的证书?

Cheerio在元素上调用.each()时返回undefined

我想向网站发出请求,获取它的html,并把它给予cheerio。 我需要获得类".thumb"的所有元素的所有"href"属性。 我在控制台上显示的结果,我只是得到了很多次未定义,我认为这是为每个元素find。 当我试图通过任何其他标签或标识符元素循环时,我得到了未定义,但如果我不循环,只是得到第一个正确的值给出。 function firstReq(){ req(url, (err,res,html)=>{ if(err){console.error(err);} var $ = cheerio.load(html); var arr = [] $("a").each(()=>{ console.log($(this).attr("href")); }); }); } 我试着console.log(html)来检查文件是否正常。 我也尝试在迭代上设置setTimeout ,也许给"request"和"cheerio"时间加载文件,仍然是一样的。 我首先尝试从url下载html文件到我的电脑(函数之外,之前调用),然后传递给cheerio,仍然未定义。 这是我与Node第一个个人项目,我很困惑。 任何帮助表示赞赏。

Cheerionetworking抓取错误

我正在努力为所有教授提供http://www.ratemyprofessors.com/ 。 我的代码似乎得到以下错误: FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed – JavaScript heap out of memory 1: node::Abort() [node] 2: 0x10d3f9c [node] 3: v8::Utils::ReportApiFailure(char const*, char const*) [node] 4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [node] 5: v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationSpace) [node] 6: v8::internal::Runtime_AllocateInTargetSpace(int, v8::internal::Object**, v8::internal::Isolate*) [node] 7: 0x292aec062bf Aborted 我不知道我做了什么导致这个错误,但可能是因为我的循环? 我需要循环超过一千万页,但我不知道为什么它甚至给我这个只有10循环的错误。 这里是代码: var express = require('express'); var path = require('path'); […]

node.js + cheerio scrape:传递一个url数组下载?

首先,这是我的代码,因为我已经进步到目前为止: 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 = ""; res.on('data', function (chunk) { data += chunk; }); res.on("end", function() { callback(data); }); }).on("error", function() { callback(null); }); } var cheerio = require("cheerio"); var url […]

如何把内容刮到html(Node.js,cheerio)

我需要删除一些内容,并将其添加到我的html文件。 var request = require('request'); var cheerio = require('cheerio'); setInterval(function () { request('https://2ch.hk/rf/res/1490589.html', function (error, response, html) { if (!error && response.statusCode == 200) { var $ = cheerio.load(html); $('.post-message').each(function (i, element) { var a = $(this).text(); console.log(a); }); } }); }, 5000); 现在,我有一个parsing的页面到我的控制台。 但我不明白,如何把HTML。 帮帮我!

阻止使用迭代的JavaScript嵌套callback

目前我使用的承诺,以防止在我的代码嵌套callback的需要,但我已经遇到挫折。 在这种情况下,我使用节点的request-promise和cheerio来模拟服务器上的jQuery。 不过,在某些时候,我需要调用jQuery.each()来为每个<a>元素创build一个请求。 有没有什么办法可以使用promise来防止这种嵌套的callback? request("http://url.com").then(function (html) { var $ = cheerio.load(html); var rows = $("tr.class a"); rows.each(function (index, el) { //Iterate over all <a> elements, and send a request for each one. //Can this code be modified to return a promise? //Is there another way to prevent this from being nested? request($(el).attr("href")).then(function (html) { var […]

试图在网站上获取歌曲列表不起作用

我试图在节点和webBrowser控制中使用phantomjs,cheerio,并获得我的歌曲列表,我可以成功的HTML,但没有歌曲列表,我不明白为什么我不能得到它… 我能做的唯一方法是复制开发工具的HTML和JQuery分析。 这是我在WinForm中的代码: private void Form1_Load(object sender, EventArgs e) { webBrowser1.Navigate("http://grooveshark.com/#!/shinningstar1001/collection"); webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted; } void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { File.WriteAllText("D://test.txt", webBrowser1.DocumentText); } 在Cheerio: var cheerio = require('cheerio'); var request = require('request'); var url = 'http://grooveshark.com/#!/shinningstar1001/collection'; request({ url: url, headers: {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'} }, function […]

用Cheerio,NodeJs从文件中追加HTML

我想从一个文件附加一些HTML到一些现有的加利福尼亚州的HTML,但我不断收到错误(错误是由cheerio库产生的,所以debugging很难) expo.includeNav = function(html, result) { var file = 'templates/admin_nav.html'; fs.readFile(file, function(err, nav) { var $ = cheerio.load(html); $('body').append(nav); result($.html()); }); } 它似乎不喜欢传递一个variables到附加函数中。 如果我把HTML中,而不是从文件调用它的作品,如下所示: $('body').append('<div class="nav"> navigation list here</div>'); 但我不希望这样,因为我希望前端开发人员能够编辑HTML文件,而不是挖掘到我的节点JS代码,以find更改HTML的位置。

如何在node.js服务器上加载图像?

我想加载一个node.js文件的图像。 但是,当我尝试fs.readfile时,如果服务器运行后没有图像文件,则会出错。 但是,当我启动我的服务器时,图像被下载并显示并正常工作。 当我保持服务器运行,并删除图像,并尝试刷新页面,希望图像将被重新下载并显示仍然是错误的fs.readfile,因为该图像文件不存在,因为它不会重新下载,如果它被删除。 我如何去使网页dynamic,所以当我刷新本地主机:1337,图像下载每次,而不是只是当服务器启动? 这是我的代码到目前为止。 //Dilbert Comic Server var http = require('http'), fs = require('fs'), request = require('request'), url = require('url'), cheerio = require('cheerio'), request = require('request'), DilbertURL = 'http://Dilbert.com/strip/' + getDateTime(); http.createServer(function (req, res) { var img = fs.readFileSync('./Dilbert.jpg'); res.writeHead(200, {'Content-Type': 'image/gif' }); res.end(img, 'binary'); console.log('Server running at http://127.0.0.1:1337/'); }).listen(1337, '127.0.0.1'); request(DilbertURL, function […]