Помогите вывести data-url ! ОЧЕНЬ НУЖНО !!!!
Ребят выручайте.:help: :help: :help: :help:
Делаю что-то типо парса, ниже код: 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 |
<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> |
Дружище, смотри
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) Я же правильно понял что он вытаскивает ссылку на контакты а не "Показать контакты" ? |
Вот правда, здорово было бы вкручивать свой javascript-код на страницы сайтов в энторнетах - я бы сейчас не нищенствовал в сраной рашке, а купил бы домишко на Гавайских островах и попивал текиллу с бурбоном.
|
Демагогия это хорошо А по существу )?)
|
Ребят ну как вытащить атрибут ссылки a data-url ( саму ссылку )
|
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", а дальше совсем непонятно |
Да, потом он начинает брать данные с контейнеров div ,
После чего сохраняет в jdata Но контейнер div user-contact ( кусочек кода я выложил )имеет данные «Показать Контакты» а мне нужно взять data-url т.е ссылку на Контакты |
В идеале конечно же было бы круто если бы он открыл эту ссылку и спарсил бы Контакты , или нажал бы на кнопку «показать Контакты» и спарсил бы но я криворукий новичка в JS , поэтому хотяб вытянуть ссылку друг )
|
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 ((( Как решить этот вопрос ? |
Часовой пояс GMT +3, время: 22:28. |