繁体   English   中英

读取html页面内容并在JSP中解析内容

[英]Reading an html page content and parsing the content in JSP

在这个Java Web应用程序项目中,我首先尝试使用getUrlContentString()方法(似乎正在工作)读取页面的内容,其次,仅使用proccessString ()方法显示标签之间的内容。 第二种方法似乎没有按预期方式响应,它返回空白页。 是什么原因引起的?

的index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <%= cookiePac.CookieJar.getUrlContentString("http://help.websiteos.com/"
                + "websiteos/example_of_a_simple_html_page.htm")%>
        <p>
            <%= cookiePac.CookieJar.proccessString()%>
        </p>

    </body>
</html>

CookieJar.java

package cookiePac;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CookieJar {
    private final List<String> cookies;
    private static String rawCookiesString = "";
    private static String rawCookiesString_1 = "";
    public CookieJar () {
        this.cookies = new ArrayList<>();
    }
    /* read the page, store into rawCookiesString */
    public static String getUrlContentString (String theUrl) {
        StringBuilder content = new StringBuilder();
        try {
            URL url = new URL(theUrl);
            URLConnection urlConnection = url.openConnection();
            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(urlConnection.getInputStream()));
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                content.append(line + "\n");
            }
            bufferedReader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
         rawCookiesString = content.toString();
         return " ";
    }
    /* select the content between <a>  */

    public static String proccessString () {
        Pattern p = Pattern.compile("<a>(.*?)</a>");
        Matcher m = p.matcher(rawCookiesString);
        if (m.find()) {
           rawCookiesString_1 = m.group(1);
        }
        return rawCookiesString_1.toString();
    }
}

我已经用您的代码创建了一个项目。 我在那里看到了一些问题。 他们来了。

  1. 首先,您使用指定的URL获得的静态html(不是在浏览器控制台窗口中看到的html),而是未执行脚本的html,其中不包含定位标记。 这就是为什么您无法获得此标签的任何内容的原因。 以以下URL为例: http : //www.cssdesignawards.com/-而不是您的http://help.websiteos.com/websiteos/example_of_a_simple_html_page.htm

  2. 其次,您尝试以这种方式匹配标签: "<a>(.*?)</a>" 但是实际上,使用此正则表达式很难匹配任何锚标记内容,因为通常使用CSS类,因此增加匹配锚内容的机会的方法是使用"<a(.*?)</a>"代替的"<a>(.*?)</a>"

  3. 接下来,命名您的getUrlContentString方法以将html作为字符串返回,但是它始终仅返回空白字符串。 考虑重命名此方法或返回rawCookiesString
  4. 而且,您有很多静态方法。 Java是一种面向对象的语言,对于应用程序的主要逻辑,最好使用非静态方法。
  5. 最后,要解析html,我建议您使用JSoup库 熟悉它不是很困难,它为html解析提供了很大的机会。 例如, 是一本从标签中提取信息的食谱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM