Tag: cheerio

在完成加载/redirect后,擦除页面

有问题的网页: http://watch2gether.com/go#<link> 我需要能够完全加载并redirect到最终目的地后才能抓取此页面。 现在来详细说一下我的问题:我一直在用请求和cheerio来试图抓取页面,并且我已经成功地这样做了: var searchTerm = 'https://www.youtube.com/watch?v=link'; var url = 'https://www.watch2gether.com/go#' + searchTerm; request(url, function(err, resp, body){ $ = cheerio.load(body); links = $('link'); //use your CSS selector here $(links).each(function(i, link){ sleep.sleep(2); console.log($(link).text() + ':\n ' + $(link).attr('href')); }); }); 但是,它会返回页面实际加载前的每个href属性的值,并将其redirect到最终页面,所以它确实是在http://watch2gether.com/go#取代http://watch2gether.com/rooms/ 由于第二页只在第一页被请求之后被加载,所以我怎样才能让我的代码第二页而不是第一页呢?

Cheerio&Gifv问题

我正试图抓取Reddit,以获得GIF。 我限制只是采取imgur刮,但有一个变化的url,有些是.gif和大多数是.gifv。 我的解决scheme是从gifv中删除v作为gif,仍然可以工作。 但是当试图这样做时,我失败了。 我试图把什么欢呼吐出来, var url = $(this).attr('href'); url.toString(); 然后再编辑它,但它不起作用。 有任何想法吗?

数据从一个函数的asynchronous执行与另一个函数的执行混合在一起

我一直在使用Cheerio,node-fetch和fs-extra编写一个基于NodeJS构build的Web抓取API。 在下面的一段代码中,我调用getReport方法,为config.supportedMountains数组中的每个string。 对于每一个项目,我想通过fetchAndStore函数运行它们,这使得html请求,通过特定的parsing器运行它,然后存储json结果。 // const fs = require('fs-extra'); const _ = require('lodash'); // const Promise = require('promise'); const schedule = require('node-schedule'); const fetchAndStore = require('./fetchAndStore.js'); const config = require('../config.js'); exports.run = function() { schedule.scheduleJob('*/20 * * * * *', function() { // Get the most recent reports // And write them to storage _.forEach(config.supportedMountains, function(fName) […]

如何获得cheerio.js中的节点行号?

我正在使用cheerio.js如下所示: var $ = cheerio.load(html,{withStartIndices : true}); 当我使用console.log($('#element1')); 。 它将返回字符位置的节点。 { type: 'tag', name: 'h6', attribs: { align: 'center', id: 'r' }, children: [ [Object] ], next: null, startIndex: 310, ……. 有没有什么办法可以在cheerio.js获取特定元素的行号?

从标签中提取URL

我正在寻找parsing通过包含元素的HTML请求: <img src="https://pbs.twimg.com/media/…." alt="Embedded image permalink"</a> 尝试获取img src标签。 我想要的只是url。 在这一点上,我可能会过度。 使用Request和Cheerio尝试完成此操作。 我尝试过的20种不同的方式是我现在的代码。 var dummy; request('http://t.co/….', function (error, response, body) { if (!error && response.statusCode == 200) { $ = cheerio.load(response.body); dummy = $('img[alt=Embedded image permalink]').attr('html'); console.dir(dummy); } } 我收到错误消息: selector = selector.substr(data[0].length); TypeError: Cannot read property '0' of null 正如我所说的,可能过于复杂。 什么是最简单的(或只是function)的方式来做到这一点?

节点j中的增量式和非增量式urls,带有cheerio和请求

我试图从以下方式使用cheerio和请求的页面刮取数据: 1)转到url 1a( http://example.com/0 ) 2)提取url 1b( http://example2.com/52 ) 3)去url 1b 4)提取一些数据并保存 5)去url1a + 1( http://example.com/1 ,我们称之为2a) 6)提取url2b( http://example2.com/693 ) 7)去url2b 8)提取一些数据并保存等… 我正在努力解决如何做到这一点(注意,我只是熟悉节点js和cheerio /请求这个任务,即使它可能不优雅,所以不寻找替代库或语言来做到这一点,对不起) 。 我想我错过了一些东西,因为我甚至不能想到这是如何工作的。 编辑 让我以另一种方式尝试。 这里是代码的第一部分: var request = require('request'), cheerio = require('cheerio'); request('http://api.trove.nla.gov.au/result?key=6k6oagt6ott4ohno&zone=book&l-advformat=Thesis&sortby=dateDesc&q=+date%3A[2000+TO+2014]&l-availability=y&l-australian=y&n=1&s=0', function(error, response, html) { if (!error && response.statusCode == 200) { var $ = cheerio.load(html, { xmlMode: true […]

似乎无法刮在Node.js的div类标签

我是node.js的新手 我的经验已经在Java和VBA。 我试图为一个朋友刮一个网站,一切都进展顺利,直到我不能得到我所追求的。 <div class="gwt-Label ADC2X2-cq ADC2X2-b-nb ADC2X2-b-Zb">Phone: +4576 102900</div> 该标签只是一个文本。 没有attr或任何东西。 然而,我不能用cheerio来刮擦它。 if(!err && resp.statusCode == 200){ var $ = cheerio.load(body); var number = $('//tried everything here!').text(); console.log(number); 这个function我也玩过了 $('.ADC2X2').filter(function(i){ console.log("Sdfs"); console.log (i); 任何build议将不胜感激。 感谢所有!

Cheerio Web Scrape如何在webscrape内部进行webscrape

我有一个特定的页面,我已经从中获取了一些数据,但为了收集更多的信息,我需要关注另一个href链接来收集更多的数据,而我不知道如何。 这是我到目前为止: router.get("/:id",function(req,res){ var url = "www.someurl.com" request(url, function (error, response, html){ if (!error && response.statusCode == 200){ $ = cheerio.load(html); $('div.ProductDetails').each(function(){// function for details var self = this; var a = $(this).children().children(); details = a.attr('href'); details = { details:details }; 这给我一个链接到细节部分与实际的细节。 我只需要知道如何在刮擦里面刮一下。

如何定位行中的第一个ID

我正在尝试做网页抓取,我想以JSON格式显示数据。 我的任务是从网站中提取每个post,并以JSON格式显示其相关数据。 我的问题是,我似乎无法定位行(),然后定位每个ID。 我可以在我的代码中inputid,但是我希望程序能够通过seacrh获得id,控制台会logging每行id中的数据。 例如:我想通过id获得第一篇文章的标题。 我希望我有道理。 我试图从以下网站提取数据的网站: 我的代码: var express = require('express'); var path = require('path'); var request = require('request'); var cheerio = require('cheerio'); var fs = require('fs'); var app = express(); var port = 8080; var url= "https://news.ycombinator.com/"; request(url, function(err,resp,body){ var $ = cheerio.load(body); var title = $('tr'); var uri var author var points […]

Node.js Cheerioparsinghtml表格内的html表格

<table cellspacing="0" cellpadding="0" width="90%" align="center" border="0"> <tr> <td> <table cellpadding="0" cellspacing="1" width="90%" border="0" align="center"> <tr> <td 整个第二个表在第一个表的td标签内。 我是新来的cheerio。 我不能完全得到我的输出给我只有内部表tr值。 我得到这两个表,这是混乱。 $ = cheerio.load(html.toString()); var data = []; $('tr').each(function(i, tr){ var children = $(this).children(); var itemNum = children.eq(0); var row = { "Num": itemNum.text().trim() }; data.push(row); console.log(row); });