【问题标题】:How to check if html document contains string如何检查html文档是否包含字符串
【发布时间】:2015-10-12 22:57:00
【问题描述】:

什么是检查 URL 是否包含给定字符串的快速方法?我尝试了 jsoup 和模式匹配,但有没有更快的方法。

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JsoupTest {

    public static void main(String[] args) throws Exception {

        String url = "https://en.wikipedia.org/wiki/Hawaii";
        Document doc = Jsoup.connect(url).get();
        String html = doc.html();

        Pattern pattern = Pattern.compile("<h2>Contents</h2>");
        Matcher matcher = pattern.matcher(html);
        if (matcher.find()) {
            System.out.println("Found it");
        }
    }
}

【问题讨论】:

标签: java jsoup contains


【解决方案1】:

这取决于。如果您的模式实际上只是一个可以在页面内容中准确找到的简单子字符串,那么您建议的两种方法都是矫枉过正的。如果确实是这种情况,您应该在不使用 JSoup 解析的情况下获取该页面。如果你想获取页面,你仍然可以使用 Jsoup,只是不要启动解析器:

Connection con = Jsoup.connect("https://en.wikipedia.org/wiki/Hawaii");
Response res = con.execute();   
String rawPageStr = res.body();

if (rawPageStr.contains("<h2>Contents</h2>")){
  //do whatever you need to do
}

如果模式确实是正则表达式,请使用:

Pattern pattern = Pattern.compile("<h2>\\s*Contents\\s*</h2>");
Matcher matcher = pattern.matcher(rawPageStr);

这只有在您不需要解析更多页面时才有意义。然而,如果你真的想通过 CSS 选择器对 DOM 进行结构化搜索,JSoup 不是一个糟糕的选择,尽管像 TagSoup 这样基于 SAX 的方法可能会快一些。

Document doc = Jsoup.connect("https://en.wikipedia.org/wiki/Hawaii").get();
Elements h2s = doc.select("h2");
for (Element h2 : h2s){
  if (h2.text().equals("Contents")){
    //do whatever & more
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-23
    • 2012-01-14
    • 2013-05-03
    • 2016-03-25
    • 1970-01-01
    • 2020-12-12
    • 2017-02-27
    • 1970-01-01
    相关资源
    最近更新 更多