Tag: cheerio

在Cheerio.js的表格中迭代TR

我在使用我在节点服务器上使用的Cheerio.js的select器时遇到问题。 核心是基于jQuery,但是我真的不能使用原生jQuery相同的select。 我有一个DOM,大致看起来像这样: <div class="test"> <table class="listing"> <thead><tr>few cells here</tr></thead> <tfoot></tfoot> <tbody><tr>These are the rows I want</tr></tbody> </table> </div> 由于在“listing”类的页面上有两个表,所以我不能直接select它,所以我需要引用带有“test”类的div。 我可以运行jQuery的select将是这样的: $('div.test tbody tr') 但这不适用于Cheerio。 如果我运行$('div [class =“test”] tr'),我得到了表上的所有行,甚至是行,所以这对我不起作用。 任何猜测? 更新:这是我正在执行的实际代码(不起作用): // Load the html var $ = cheerio.load(html, { normalizeWhitespace: true }); $('div.tillgodo tbody tr').each(function(){ console.log("Found credited course…"); var children = $(this).children(); var credits […]

使用cheerio执行scraped JavaScript

我有一个网页,其中有一些JS API不改变dom,但返回一些数字。 我想写一个NodeJS应用程序,下载这些页面,并在下载页面的上下文中执行这些function。 我正在寻找cheerio页面抓取..但是,当我看到有多容易导航和操作与它的DOM,我看不到任何访问运行页面function。 可以做到吗? 我应该看看,而不是在jsdom? 谢谢

如何从response.body获取节点中<img src =''>'的绝对path

所以我想用request-promise来拉一个页面的主体。 一旦我有了页面,我想收集所有的标签,并获得这些图像的src的数组。 假设页面上的src属性具有相对path和绝对path。 我想要一个页面上的imgs绝对path的数组。 我知道我可以使用一些string操作和npmpath来build立绝对path,但我想find一个更好的方法来做到这一点。 var rp = require('request-promise'), cheerio = require('cheerio'); var options = { uri: 'http://www.google.com', method: 'GET', resolveWithFullResponse: true }; rp(options) .then (function (response) { $ = cheerio.load(response.body); var relativeLinks = $("img"); relativeLinks.each( function() { var link = $(this).attr('src'); console.log(link); if (link.startsWith('http')){ console.log('abs'); } else { console.log('rel'); } }); }); 结果 /logos/doodles/2016/phoebe-snetsingers-85th-birthday-5179281716019200-hp.gif […]

使用xpath和cheerio获取元素

试图在node.js中编写一个函数,它将通过xpath获取元素。 我有一个所需的dom元素的xpath xpath = '/html/body/div/div[2]/div/h1/span' 我的DOM通过fs模块加载(因为我有这个网页存储在本地): var file = fs.readFileSync( "aaa.html" ) var inDom = cheerio.load( file ) 然后我试图通过每个xpath部分进行迭代,得到dom树的元素,如果名称和元素编号匹配,则检查它是否为子元素,如果是, 则将rez存储为此mathed元素。 然后我继续挖掘新的xpath部分。 代码看起来像这样,但它没有得到我想要的东西,因为在我得到第一个mach并将rez设置为匹配元素之后,在下一个for循环中,这个新元素似乎没有任何子元素。 var rez = inDom('html'); var xpath = inXpath.split( "/" ); for( var i = iterateStart; i < xpath.length; i++ ) { var selector = xpath[ i ].split('[')[0]; var matches = xpath[ i ].match(/\[(.*?)\]/); […]

如何使用CHEERIO.js这个HTML?

<div class="A"> <section class="B" data-vr-zone="B"> <header class="C"> BarFoo</header> <ul class="list"> <li data-vr-contentbox=""> <a href="http://www.foobar.com/…/html"> <small>BarBar</small> <span>Foo Bar foobarbar FooFoo?</span> </a> </li> <li data-vr-contentbox=""> <a href="http://www.foofoobar.com/…/html"> <small>BarBarBar</small> <span>Foo foo FooFoo?</span> </a> </li> 我想访问HREF属性中的URL。 而SPAN中的文本 – 只有第一个列表项。 我有什么作品,但我期待学习更好的方法。 var url = $('div .A').children().children().children().children()[0].attribs.href; var title = $('div .A').children().children().children().children()[0].children[2].children[0].data;

Node.js Cheerioparsing器打破UTF-8编码

我像Cheerio一样parsing我的请求: var url = http://shop.nag.ru/catalog/16939.IP-videonablyudenie-OMNY/16944.IP-kamery-OMNY-c-vario-obektivom/16704.OMNY-1000-PRO; request.get(url, function (err, response, body) { console.log(body); $ = cheerio.load(body); console.log($(".description").html()); }); 而作为输出,我看到的内容,但在不可读的奇怪的编码: //Plain body console.log(body) (ps russian chars): <h1><span style="font-size: 16px;">Уличная 3Мп IP HD камера OMNY – попробуйте найти лучше</span></h1><p style // cheerio's console.log $(".description").html() <h1><span style="font-size: 16px;">Уличная 3Мп IP HD камера OMNY 目标url链接编码采用UTF-8格式。 那么为什么Cheerio打破了我的编码? 试图使用iconv来编码我的身体响应: var body1 = […]

获取TypeError:当使用cheerio和jsonframe进行刮取时,selector.includes不是一个函数

我正试图用下面的代码来废弃一个网站: const cheerio = require('cheerio'); const jsonframe = require('jsonframe-cheerio'); const $ = cheerio.load('https://coinmarketcap.com/all/views/all/'); jsonframe($); // initializes the plugin //exception handling process.on('uncaughtException', err => console.error('uncaught exception: ', err)) process.on('unhandledRejection', (reason, p) => console.error('unhandled rejection: ', reason, p)) const frame = { "crypto": { "selector": "tbody > tr", "data": [{ "name": "td:nth-child(2) > a:nth-child(3)", "url": { "selector": […]

Nodejs网页抓取与authenticationcookie

最近我试图从网站( kicktipp )使用Nodejs, 请求模块和cheerio刮取信息。 由于本网站需要身份validation才能查看其大部分网站,我尝试通过发布请求login,并检查用户是否使用以下代码login(我用虚拟数据replace了凭据,但在实际脚本中使用了真实数据): var request = require('request'); var jar = request.jar(); var request = request.defaults({ jar: jar, followAllRedirects: true }); var jar = request.jar(); var cheerio = require('cheerio'); request.post({ url: 'http://www.kicktipp.de/info/profil/loginaction', headers: { 'content-type': 'application/x-www-form-urlencoded' }, method: 'post', jar: jar, body: 'kennung=test@example.com&passwort=1234567890&_charset_=UTF-8&submitbutton=Anmelden' }, function(err, res, body){ if(err) { return console.error(err); }; request.get({ url: […]

如何使用cheerio获取脚本内容

我正在使用cheerio库,并试图让这个脚本字段 – script type="application/json"但由于某种原因,它无法find这些脚本标签。 哪里不对? 我该如何解决? var $ = require('cheerio') var parsedHTML = $.load(html) console.log( parsedHTML('script').get().length ); // this is 0

我如何使用node.jsdynamic内容页面?

我试图刮一个网站,但我没有得到一些元素,因为这些元素是dynamic创build的。 我在node.js中使用cheerio,我的代码如下所示。 var request = require('request'); var cheerio = require('cheerio'); var url = "http://www.bdtong.co.kr/index.php?c_category=C02"; request(url, function (err, res, html) { var $ = cheerio.load(html); $('.listMain > li').each(function () { console.log($(this).find('a').attr('href')); }); }); 这段代码返回空的响应,因为当页面被加载时, <ul id="store_list" class="listMain">是空的。 内容尚未附上。 如何使用node.js获取这些元素? 我如何刮dynamic内容的网页?