如何在访问该网页之前获取Web内容

时间:2010-06-30 05:25:34

标签: javascript jsp web-crawler

如何获取给定URL的网页描述/内容。 (谷歌之类的东西给出了每个结果链接的简短描述)。 我想在我的jsp页面中这样做。

提前感谢!

1 个答案:

答案 0 :(得分:4)

想法:以流的形式打开网址,然后在描述元标记中对字符串进行HTML解析。

抓取网址内容:

URL url = new URL("http://www.url-to-be-parsed.com/page.html");
    BufferedReader in = new BufferedReader(
                new InputStreamReader(
                url.openStream()));

需要根据HTML解析器所需的内容(流,字符串等)调整上面的代码。

HTML-Parse the tags:

<meta name="description" content="This is a place where webmasters can put a description about this web page" />

您可能也有兴趣获取该页面的标题:

<title>This is the title of the page!</title>

警告:正则表达式似乎无法在HTML文档上可靠地运行,因此HTML-parser更好。

HTML解析器的一个示例:

  1. 使用HasAttributeFilter按具有name="description"属性
  2. 的标记进行过滤
  3. 尝试Node ---&gt; MetaTag施放
  4. 使用content
  5. 获取MetaTag.getAttribute()

    <强>代码:

    import org.htmlparser.Node;
    import org.htmlparser.Parser;
    import org.htmlparser.util.NodeList;
    import org.htmlparser.util.ParserException;
    import org.htmlparser.filters.HasAttributeFilter;
    import org.htmlparser.tags.MetaTag;
    
    public class HTMLParserTest {
        public static void main(String... args) {
            Parser parser = new Parser();
            //<meta name="description" content="Some texte about the site." />
            HasAttributeFilter filter = new HasAttributeFilter("name", "description");
            try {
                parser.setResource("http://www.youtube.com");
                NodeList list = parser.parse(filter);
                Node node = list.elementAt(0);
    
                if (node instanceof MetaTag) {
                    MetaTag meta = (MetaTag) node;
                    String description = meta.getAttribute("content");
    
                    System.out.println(description);
                    // Prints: "YouTube is a place to discover, watch, upload and share videos."
                }
    
            } catch (ParserException e) {
                e.printStackTrace();
            }
        }
    
    }
    

    <强>考虑:

    如果在每次加载页面时都在JSP中完成此操作,则由于URL的网络I / O,您可能会变慢。更糟糕的是,如果你每次都在为你的页面中有很多URL链接的情况下执行此操作,那么由于n个URL的顺序操作,速度可能会很大。也许您可以将这些信息存储在数据库中并根据需要刷新它们,而不是在JSP中即时进行。