2015-02-25 7 views
1

Я новичок в XPATH выражение,Найти Xpath элемента в содержание страницы HTML с использованием Java

У меня есть ниже URL:

http://www.newark.com/white-rodgers/586-902/contactor-spst-no-12vdc-200a-bracket/dp/35M1913?MER=PPSO_N_P_EverywhereElse_None

который содержит HTML PageContent, используя следующие xpaths, он приводит к тому же ul-элементу в javascript:

  1. //*[@id="moreStock_5257711"]
  2. //*[@id="priceWrap"]/div[1]/div/a/following-sibling::ul
  3. //html/body/div/div/div/div/div/div/div/div/div/div/a/following-sibling::ul

с помощью этого XPaths как sholud я получить такой же уль элемент в Java

Я попытался с помощью "HTML чистого" он не в XPath -

"//*[@id="priceWrap"]/div[1]/div/a/following-sibling::ul", 
"//html/body/div/div/div/div/div/div/div/div/div/div/a/following-sibling::ul" 

он работал для "// * [@ id = 'moreStock_5257711']" этого xpath. Итак ниже код, который я попробовал в HTML очистителя

package com.test.htmlcleaner.HtmlCleaner; 

import java.io.IOException; 

import org.htmlcleaner.CleanerProperties; 
import org.htmlcleaner.HtmlCleaner; 
import org.htmlcleaner.TagNode; 
import org.htmlcleaner.XPatherException; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 

public class Test { 
public static void main(String[] args) { 

    try { 
HtmlCleaner htmCleaner = new HtmlCleaner(); 
    CleanerProperties cleanerProperties = htmCleaner.getProperties(); 
    cleanerProperties.setTranslateSpecialEntities(true); 
    cleanerProperties.setTransResCharsToNCR(true); 
    cleanerProperties.setOmitComments(true); 

    String s = "http://www.newark.com/white-rodgers/586-902/contactor-spst-no-12vdc-200a-bracket/dp/35M1913?MER=PPSO_N_P_EverywhereElse_None"; 
    Document doc = Jsoup.connect(s).timeout(30000).userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2").get(); 

    String pageContent=doc.toString(); 
    TagNode node = htmCleaner.clean(pageContent); 
    Object[] statsNode = node.evaluateXPath("//*[@id='moreStock_5257711']"); 
    if(statsNode.length > 0) {  
      for(int i=0;i<statsNode.length;i++){ 
       TagNode resultNode = (TagNode)statsNode[i]; 
       System.out.println("hi"); 
       System.out.println("Element Text : " +resultNode.getText().toString().trim());     
       } 
      } 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } catch (XPatherException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
} 
} 

Я обязательно все XPaths sholud работать с одним пакетом в Java

Может ли один предложить мне заставить работать все XPaths выражение получения уль элемента с помощью Java ,

Благодарим вас за внимание.

+0

Покажите нам свой код Java. –

+0

может предложить мне, если html cleaner не смог обработать какой пакет лучше всего получить все xpaths для работы 1. // * [@ id = "moreStock_5257711"] 2. // * [@ id = "priceWrap"]/div [1 ]/div/a/follow-sibling :: ul 3. // html/body/div/div/div/div/div/div/div/div/div/div/a/follow-sibling :: ul URL: http://www.newark.com/white-rodgers/586-902/contactor-spst-no-12vdc-200a-bracket/dp/35M1913?MER=PPSO_N_P_EverywhereElse_None – user3008819

ответ

0

Попробуйте отладить фактическое дерево HTML DOM, созданное HtmlCleaner. Используйте следующий код:

String pageContent = doc.toString(); 
TagNode node = htmCleaner.clean(pageContent); 

StringWriter buffer = new StringWriter(); 
node.serialize(new PrettyHtmlSerializer(cleanerProperties), buffer); 

System.out.println(buffer.toSting()); 

Теперь попробуйте применить все XPaths на этом выходе буфера и понять, почему они не работают.

+0

TagNode bufferContent = htmCleaner.clean (buffer.toString()); Object [] statsNode = bufferContent.evaluateXPath ("// html/body/div/div/div/div/div/div/div/div/div/div/a/follow-sibling :: ul"); Эти две строки я добавил после вашего кода. Не повезло, вы можете поделиться некоторыми примерами с этими похожими Xpaths. – user3008819

+0

Вы меня неправильно поняли. Моя идея состояла в том, чтобы проверить вывод 'System.out.println (buffer.toSting());', чтобы узнать, почему XPath не работает. Буфер хранит дерево DOM, на которое оценивается ваш XPath, поэтому, если конкретный XPath не работает, это означает, что HtmlCleaner создал дерево, отличное от фактического HTML-страницы страницы. –

+0

спасибо, что я сделал это, работал ... с наилучшими пожеланиями – user3008819