Как очистить данные из <body>HTML-страниц с помощью Lucidworks Fusion 4.1 - PullRequest
0 голосов
/ 16 января 2019

Я использую веб-коннектор для очистки данных с сайта (https://www.silverhavenjewellery.com/categories/silver-jewellery-designs.html).). Веб-страница содержит множество элементов, вложенных в тег body (div, ul, li и т. Д.). Из документации Lucidworks я обнаружил, что встроенный анализатор HTML извлекает данные только из следующих тегов: title, meta, a, link и body (но не потомков тела). Вот страница: https://doc.lucidworks.com/fusion-server/4.1/reference-guides/parser-stages/html-parser.html. Чтобы преодолеть это, я следовал инструкциям это сообщение в блоге Lucidworks: https://lucidworks.com/2017/01/24/extracting-values-from-element-attributes-using-jsoup-and-a-javascript-stage/. См. код JavaScript, который я использовал, чтобы попытаться очистить дочерние элементы тега body ниже. Обратите внимание, что код работает, как и ожидалось, когда я изменяю "div" в строке кода ниже на «тело». Если я ищу какой-либо из дочерних элементов в теле, он даже не осознает, что они существуют. Любая помощь в преодолении этой проблемы будет принята с благодарностью

divs = jdoc.select("div");

function(doc){
    
	var File = java.io.File;
var Iterator = java.util.Iterator;
var Jsoup = org.jsoup.Jsoup;
var Document = org.jsoup.nodes.Document;
var Element =  org.jsoup.nodes.Element;
var Elements = org.jsoup.select.Elements;

var content = doc.getFirstFieldValue("body");
var jdoc = org.jsoup.nodes.Document;
var e = java.lang.Exception;
var div = org.jsoup.nodes.Element;
var img = org.jsoup.nodes.Element;
var iter = java.util.Iterator;
var divs = org.jsoup.select.Elements;
var counter = 1;


  
   
   try {
             jdoc = Jsoup.parse(content);
             divs = jdoc.select("div");
             iter = divs.iterator();
             div = null; // initialize our value to null
            while (iter.hasNext()) {
              
              	doc.addField(counter, "woohoo"); //for debugging purposes
                div = iter.next();
              counter = counter++;
            }

            if (div != null) {
                doc.addField("found it", "woohoo");//for debugging purposes
            } else {
              doc.addField("error", "this is an error");//for debugging purposes
                logger.warn("Div was null");
            }

        } catch ( e) {
           logger.error(e);
        }

    return doc;
}
...