Помогите вывести 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, время: 15:55. |