Задать вопрос
@cat_crash

Странное поведение NodeJS+XPath

Доброго дня

Пытаюсь обучиться нынче модному NodeJS и для этого решил сделать себе сервис для «потрошения» сайтов при помощи Xpath запросов.
Почему NodeJS — потому что хочу подучить его
Почему Xpath — потому что решил не изобретать «велосипед»
Почему не JQuery — потому что при помощи JQ нельзя получить значение аттрибута XML ноды через запрос (аналога//a/href в Xpath)

Собственно сам NodeJS код
var xpath = require('xpath') 
var dom = require('xmldom').DOMParser
var request = require('request')
var tidy = require('tidy2')
var util = require('util')


						var url=['http://www.rul.by/companies/sect.1.html',
							'http://www.rul.by/companies/sect.1.page.2.html',
							]
					

								
								
					url.forEach(function(item){
						request(item, function (error, response, body) {
						console.log('Fetch url:'+item);
							
						  if (!error && response.statusCode == 200) {
									
									var array=new Array();
									
									var html=tidy.tidyString(body)
									var doc = new dom().parseFromString(html)
									//
									var fields=["//li[@class='nm']/a/text()",
										"//li[@class='adr']/text()",
										"//li[@class='txt']/text()",
										"//td[@class='cont']/ul/li/text()",
										"//td[@class='cont']/ul/li/a/text()"]
										
									
									fields.forEach(function(field){
									
										var tmp=xpath.select(field, doc)
										console.log(util.inspect(tmp));
										
									});

						  }
					  
						})
					}, this)
					



Все работает нормально (Запрос отправляется, контент принимается, битый HTML контент приводится в нормальный вид при помощи Tidy) Дальше начинается непонятное. XPath отрабатывает, но возвращает неадекватный контент, содержащий бинарные данные, куски каких то NodeJS библиотек. Вот пример того что выдает www.dropbox.com/s/17hny8fso80d2hi/out.txt (скачайте и откройте в редакторе, который умеет отображать НЕ только ACSII симовлы. Например Notepad ++)
Хотя на более простых запросах типа //title возвращает что надо.

Собственно вопрос — кто нибудь сталкивался с подобного рода проблемой? Как оттрасировать причину ошибки? Кому можно написать об ошибке? (предполагаю создателю библиотеки XPath)

В общем любые комментарии, которые помогут разобраться в причине приветствуются
  • Вопрос задан
  • 4387 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Malyw
@Malyw
Если вы хотите получить в конце просто контент, используйте:
console.log(tmp.toString());
Проверил ваш пример у себя с такой заменой- все работает.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы