使用JSoup for Java格式化HTML问题

时间:2015-12-05 05:13:28

标签: java html web-scraping jsoup screen-scraping

我试图刮掉"文字"关闭JSoup的网站。我可以干净地得到文本(根本没有格式化,只有文本),或者所有格式仍然附加(即< br>以及< p>和< / p>)。

但是,我似乎无法将格式化版本包含在< br />在任何程度上,这是唯一被特别要求与文本一起使用的东西。

例如,我可以得到这个:

<p><br>Worldwide database</p>

和此:

Worldwide database

但是我无法得到这个,这是我想要的结果:

Worldwide database<br/>

我没有看到任何&lt;通过Firefox上的FireBug插件查看HTML代码时,我想知道这可能是问题吗?或者我的代码中使用的方法是否存在问题?

无论如何,这是我的代码:

Elements descriptionHTML = doc.select("div[jsname]"); // <-- Get access to the text w/ JSoup
String descText = descriptionHTML.text(); // <-- Get the code w/o any formating at all

// This prints out the desired text with the <p><br> and </p>, but no <br/>
for (Element link : descriptionHTML) 
{
   String jsname = link.attr("jsname");
   if( jsname.equals("C4s9Ed")){                    
        System.out.println(link);
        break;
   }                                        
}

我真的对这个问题有任何帮助。

谢谢, 千斤顶

1 个答案:

答案 0 :(得分:1)

HTML没有为<br>元素定义结束标记。但是,XHTML要求将标记标记为空:<br />。 JSoup解析两者,但只会打印出普通的HTML(<br>)。

如果您在Jsoup中使用XML解析器,则<br>标记不会关闭,因此Jsoup会尝试猜测匹配的结束标记</br>的位置,这些标记既不符合HTML也不符合XHTML。

如果你想保留换行符信息并删除所有其他标签,我认为你需要在Jsoup之外编写该部分。您可以使用uniqe其他字符串替换所有<br><br />字符串,例如"_brSplitPos_",然后使用JSoup解析文档,仅打印文本并替换{{1} } "_brSplitPos_"

<br />