我正在尝试了解如何一起使用htmlUnit和jSoup,并且已经成功地理解了基础知识。但是,我正在尝试将特定网页中的文本存储到字符串中,但是当我尝试这样做时,它只返回一行而不是整个文本。
我知道我编写的代码可以正常工作,因为当我打印出p.text时,它会返回存储在网站中的全文。
private static String getText() {
try {
final WebClient webClient = new WebClient();
final HtmlPage page = webClient.getPage("https://www.gov.uk/government/policies/brexit");
List<HtmlAnchor> anchors = page.getAnchors();
HtmlPage page1 = anchors.get(18).click();
String url = page1.getUrl().toString();
Document doc = Jsoup.connect(url).get();
Elements paragraphs = doc.select("div[class=govspeak] p");
for (Element p : paragraphs)
System.out.println(p.text());
} catch (Exception e) {
e.printStackTrace();
Logger.getLogger(HTMLParser.class.getName()).log(Level.SEVERE, null, e);
}
return null;
}
}
当我引入字符串的概念来存储来自p.text的文本时,它只返回一行而不是整个文本。
private static String getText() {
String text = "";
try {
final WebClient webClient = new WebClient();
final HtmlPage page = webClient.getPage("https://www.gov.uk/government/policies/brexit");
List<HtmlAnchor> anchors = page.getAnchors();
HtmlPage page1 = anchors.get(18).click();
String url = page1.getUrl().toString();
Document doc = Jsoup.connect(url).get();
Elements paragraphs = doc.select("div[class=govspeak] p");
for (Element p : paragraphs)
text=p.text();
} catch (Exception e) {
e.printStackTrace();
Logger.getLogger(HTMLParser.class.getName()).log(Level.SEVERE, null, e);
}
return text;
}
最终,我想要做的就是将整个文本存储到一个字符串中。非常感谢任何帮助,提前谢谢。
答案 0 :(得分:1)
Document doc = Jsoup.connect(url).get();
String text = doc.text();
基本上就是这样。由于JSoup已经在处理从文本中清除所有html标签的事实,您可以使用doc.text()
并且您将收到从html标签清除的整个页面的内容。
答案 1 :(得分:0)
for (Element p : paragraphs)
text+=p.text(); // Append the text.
在您的代码中,您将覆盖变量文本的值。这就是为什么函数只返回最后一行的原因。
答案 2 :(得分:0)
我认为使用HtmlUnit结果作为jSoup的起点是一个奇怪的想法。您的方法有各种缺点(例如考虑cookie)。当然HtmlUnit已经解析了html代码;你会做两次工作。
我希望这段代码能够在没有jSoup的情况下满足您的要求。
private static String getText() throws FailingHttpStatusCodeException, MalformedURLException, IOException {
StringBuilder text = new StringBuilder();
try (WebClient webClient = new WebClient()) {
final HtmlPage page = webClient.getPage("https://www.gov.uk/government/policies/brexit");
List<HtmlAnchor> anchors = page.getAnchors();
HtmlPage page1 = anchors.get(18).click();
DomNodeList<DomNode> paragraphs = page1.querySelectorAll("div[class=govspeak] p");
for (DomNode p : paragraphs) {
text.append(p.asText());
}
}
return text.toString();
}