Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.07.2018, 20:35
Новичок на форуме
Отправить личное сообщение для Floky Посмотреть профиль Найти все сообщения от Floky
 
Регистрация: 19.07.2018
Сообщений: 8

Помогите вывести data-url ! ОЧЕНЬ НУЖНО !!!!
Ребят выручайте.

Делаю что-то типо парса, ниже код:


const osmosis = require('osmosis');
const fs = require('fs');
let savedData = [];
osmosis


   .get('https://##########//profi')
   .find('.user-preview')
   .set({
           'Name': '.user-preview_name',
	   'Specialization': '.user-preview_specialization',
  	   'City': '.user-preview_city',
	   'URL': '.data-url',
    })

		
	.data(function(data) {
      console.log(data);
      savedData.push(data);
   })
   .done(function() {
      fs.writeFile('data.json', JSON.stringify( savedData, null, 4), function(err) {
        if(err) console.error(err);
        else console.log('Data Saved to data.json file');
      })
   });



Беда в том что все работает нормально, но САМОЕ ГЛАВНОЕ как вытащить мне user-contacts, т.е не ПОКАЗАТЬ КОНТАКТЫ А ИМЕННУ ССЫЛКУ НА CONTACTS



<div class="user-contacts" data-component="userContacts" data-url="https://www.###########/contacts" data-component-ready="true"><a class="js-userContactsShow" href="#">Показать контакты</a></div>







И еще не главный но то же вопрос , как сделать чтобы парсер а именно ( .get('https://##########//profi') цеплял не только одну страницу а скажим /profi/2 /profi/3 /profi/4
Ответить с цитированием
  #2 (permalink)  
Старый 19.07.2018, 23:58
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

<div class="user-contacts" data-component="userContacts" data-url="https://www.###########/contacts" data-component-ready="true"><a class="js-userContactsShow" href="#">Показать контакты</a></div>
	<script>
console.log(document.querySelector('div').dataset.url);
	</script>
Ответить с цитированием
  #3 (permalink)  
Старый 20.07.2018, 07:01
Новичок на форуме
Отправить личное сообщение для Floky Посмотреть профиль Найти все сообщения от Floky
 
Регистрация: 19.07.2018
Сообщений: 8

Дружище, смотри
const osmosis = require('osmosis');
const fs = require('fs');
let savedData = [];
osmosis


   .get('https://##########//profi')
   .find('.user-preview')
   .set({
           'Name': '.user-preview_name',
	   'Specialization': '.user-preview_specialization',
  	   'City': '.user-preview_city',
	   'URL': '.data-url',
    })

		
	.data(function(data) {
      console.log(data);
	[B]   console.log(document.querySelector('div').dataset.url);[/B]
      savedData.push(data);
   })
   .done(function() {
      fs.writeFile('data.json', JSON.stringify( savedData, null, 4), function(err) {
        if(err) console.error(err);
        else console.log('Data Saved to data.json file');
      })
   });


Дружище вот вставил в код и NODE JS выдает ошибку


C:\hellop\index.js:40
console.log(document.querySelector('div').dataset. url);
^

ReferenceError: document is not defined
at Array.<anonymous> (C:\hellop\index.js:40:20)
at Command.Data [as cb] (C:\hellop\node_modules\osmosis\lib\commands\data. js:17:17)
at Command.start (C:\hellop\node_modules\osmosis\lib\Command.js:159 :21)
at C:\hellop\node_modules\osmosis\lib\Command.js:166: 18
at dataDone (C:\hellop\node_modules\osmosis\lib\commands\set.j s:97:17)
at Command.cb (C:\hellop\node_modules\osmosis\lib\commands\set.j s:140:17)
at Command.start (C:\hellop\node_modules\osmosis\lib\Command.js:159 :21)
at C:\hellop\node_modules\osmosis\lib\Command.js:166: 18
at Command.Find [as cb] (C:\hellop\node_modules\osmosis\lib\commands\find. js:54:9)
at Command.start (C:\hellop\node_modules\osmosis\lib\Command.js:159 :21)

Я же правильно понял что он вытаскивает ссылку на контакты а не "Показать контакты" ?

Последний раз редактировалось Floky, 20.07.2018 в 07:04.
Ответить с цитированием
  #4 (permalink)  
Старый 20.07.2018, 07:55
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Вот правда, здорово было бы вкручивать свой javascript-код на страницы сайтов в энторнетах - я бы сейчас не нищенствовал в сраной рашке, а купил бы домишко на Гавайских островах и попивал текиллу с бурбоном.
Ответить с цитированием
  #5 (permalink)  
Старый 20.07.2018, 08:58
Новичок на форуме
Отправить личное сообщение для Floky Посмотреть профиль Найти все сообщения от Floky
 
Регистрация: 19.07.2018
Сообщений: 8

Демагогия это хорошо А по существу )?)
Ответить с цитированием
  #6 (permalink)  
Старый 20.07.2018, 11:47
Новичок на форуме
Отправить личное сообщение для Floky Посмотреть профиль Найти все сообщения от Floky
 
Регистрация: 19.07.2018
Сообщений: 8

Ребят ну как вытащить атрибут ссылки a data-url ( саму ссылку )
Ответить с цитированием
  #7 (permalink)  
Старый 20.07.2018, 12:13
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Floky,
ты бы хоть рассказал, что делают все эти методы в неизвестной науке, но мегакрутейшей библиотечке
osmosis
   .get('https://##########//profi')
   .find('.user-preview')
   .set({
           'Name': '.user-preview_name',
	   'Specialization': '.user-preview_specialization',
  	   'City': '.user-preview_city',
	   'URL': '.data-url',
    })

предвижу, что тут есть загрузка страницы, потом поиск в ней какого-то ".user-preview", а дальше совсем непонятно
Ответить с цитированием
  #8 (permalink)  
Старый 20.07.2018, 12:47
Новичок на форуме
Отправить личное сообщение для Floky Посмотреть профиль Найти все сообщения от Floky
 
Регистрация: 19.07.2018
Сообщений: 8

Да, потом он начинает брать данные с контейнеров div ,
После чего сохраняет в jdata
Но контейнер div user-contact ( кусочек кода я выложил )имеет данные «Показать Контакты» а мне нужно взять data-url т.е ссылку на Контакты
Ответить с цитированием
  #9 (permalink)  
Старый 20.07.2018, 12:49
Новичок на форуме
Отправить личное сообщение для Floky Посмотреть профиль Найти все сообщения от Floky
 
Регистрация: 19.07.2018
Сообщений: 8

В идеале конечно же было бы круто если бы он открыл эту ссылку и спарсил бы Контакты , или нажал бы на кнопку «показать Контакты» и спарсил бы но я криворукий новичка в JS , поэтому хотяб вытянуть ссылку друг )
Ответить с цитированием
  #10 (permalink)  
Старый 20.07.2018, 20:14
Новичок на форуме
Отправить личное сообщение для Floky Посмотреть профиль Найти все сообщения от Floky
 
Регистрация: 19.07.2018
Сообщений: 8

var request = require('request');
var cheerio = require('cheerio'); 




var URL = new Array(
"https://Страница1", 
"https://Страница2",
"https:Страница3");



var request = require('request');
var cheerio = require('cheerio');
var tress = require('tress');
var fs = require('fs');
var Json2csvParser = require('json2csv').Parser;
var needle = require('needle');

var results = [];
var urls = [];

fs.truncate('one.csv', 0, function(){console.log('done')});





var q;
q = tress(function(URL, callback){

needle.get(URL, function (err, res, body) {
		if (err) throw err;
		var $ = cheerio.load(res.body);
		
			//TODO считал количество урлов автоматом по селектору
			//var listLength = $('.user-preview_name').length;
			//var link;
			
			for (i = 0; i <=80; i++) {
					results.push({
				 		Name: $('.user-preview_name').eq( i ).text().trim(),
						City: $('.user-preview_city').eq( i ).text().trim(),
						Spezialinost: $('.user-preview_specialization').eq( i ).text().trim(),
		
						
					 });
				 	//console.log(urls[i]);
				}

		console.log(res.statusCode);
		callback();
		 });
});


q.push(URL, function(){
		console.log("watch: push ");
	});

q.drain = function(){
	console.log("success ");

		//Данные которые спарсил раскладываю по следующим столбцам
		const fields = [ 'Name', 'City', 'Spezialinost','date', 'urlp'];
		const opts = { fields , delimiter: ';'};

		try {
			// Из json данные складываются в csv файл
		  const parser = new Json2csvParser(opts);
		  const csv = parser.parse(results);

		  fs.appendFileSync('one.csv', '\ufeff'+ csv , {encoding: 'utf8'});

		} catch (err) {
		console.error(err);
		}
}



Вопрос сам код выполняет действия с одной страницой, потом с другой затирая последующие результаты в CSV (((

Как решить этот вопрос ?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите вывести результат на страницу Tomson123 Общие вопросы Javascript 13 12.08.2017 05:14
Помогите пожалуйста с выпадающим меню на JS loginovvs Общие вопросы Javascript 11 28.11.2012 08:09
Помогите пожалуйста, очень срочно!!! PAMAC AJAX и COMET 1 20.10.2009 23:38
помогите : селекты и инпут... очень нужно SandZ Events/DOM/Window 4 10.09.2009 14:22
Помогите динамически интегрировать значение в URL Yurii Общие вопросы Javascript 14 07.05.2008 15:12