Доброго дня
Пытаюсь обучиться нынче модному 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)
В общем любые комментарии, которые помогут разобраться в причине приветствуются