- 浏览: 402285 次
- 性别:
- 来自: 长春
文章分类
最新评论
-
milkyTea_:
...
学习:二维码、QR码、J4L-QRCode、java -
xunke515:
请问如何更换其他用户,注销了从新登录的时候选择么?
Hadoop启动时出现Unrecognized option: -jvm 和 Could not create the Java virtual machine -
_copythat:
学习:二维码、QR码、J4L-QRCode、java -
小fi(FD):
楼主,你好,关于你发表的《基于动态表单的Java不确定字段数报 ...
基于动态表单的Java不确定字段数报表项目实现 -
rmn190:
受用了。多谢分享!
SD2见闻--参加PPT制作秘笈沙龙
这是一个web搜索的基本程序,从命令行输入搜索条件(起始的URL、处理url的最大数、要搜索的字符串), 它就会逐个对Internet上的URL进行实时搜索,查找并输出匹配搜索条件的页面。 这个程序的原型来自《java编程艺术》, 为了更好的分析,站长去掉了其中的GUI部分,并稍作修改以适用jdk1.5。以这个程序为基础,可以写出在互联网上搜索 诸如图像、邮件、网页下载之类的“爬虫”。 先请看程序运行的过程: D:\java>javac SearchCrawler.java(编译) D:\java>java SearchCrawler http://127.0.0.1:8080/zz3zcwbwebhome/index.jsp 20 java Start searching... result: searchString=java http://127.0.0.1:8080/zz3zcwbwebhome/index.jsp http://127.0.0.1:8080/zz3zcwbwebhome/reply.jsp http://127.0.0.1:8080/zz3zcwbwebhome/learn.jsp http://127.0.0.1:8080/zz3zcwbwebhome/download.jsp http://127.0.0.1:8080/zz3zcwbwebhome/article.jsp http://127.0.0.1:8080/zz3zcwbwebhome/myexample/jlGUIOverview.htm http://127.0.0.1:8080/zz3zcwbwebhome/myexample/Proxooldoc/index.html http://127.0.0.1:8080/zz3zcwbwebhome/view.jsp?id=301 http://127.0.0.1:8080/zz3zcwbwebhome/view.jsp?id=297 http://127.0.0.1:8080/zz3zcwbwebhome/view.jsp?id=291 http://127.0.0.1:8080/zz3zcwbwebhome/view.jsp?id=286 http://127.0.0.1:8080/zz3zcwbwebhome/view.jsp?id=285 http://127.0.0.1:8080/zz3zcwbwebhome/view.jsp?id=284 http://127.0.0.1:8080/zz3zcwbwebhome/view.jsp?id=276 http://127.0.0.1:8080/zz3zcwbwebhome/view.jsp?id=272 又如: D:\java>java SearchCrawler http://www.sina.com 20 java Start searching... result: searchString=java http://sina.com http://redirect.sina.com/WWW/sinaCN/www.sina.com.cn class=a2 http://redirect.sina.com/WWW/sinaCN/www.sina.com.cn class=a8 http://redirect.sina.com/WWW/sinaHK/www.sina.com.hk class=a2 http://redirect.sina.com/WWW/sinaTW/www.sina.com.tw class=a8 http://redirect.sina.com/WWW/sinaUS/home.sina.com class=a8 http://redirect.sina.com/WWW/smsCN/sms.sina.com.cn/ class=a2 http://redirect.sina.com/WWW/smsCN/sms.sina.com.cn/ class=a3 http://redirect.sina.com/WWW/sinaNet/www.sina.net/ class=a3 D:\java> 下面是这个程序的源码 import java.util.*; import java.net.*; import java.io.*; import java.util.regex.*; // 搜索Web爬行者 public class SearchCrawler implements Runnable{ /* disallowListCache缓存robot不允许搜索的URL。 Robot协议在Web站点的根目录下设置一个robots.txt文件, *规定站点上的哪些页面是限制搜索的。 搜索程序应该在搜索过程中跳过这些区域,下面是robots.txt的一个例子: # robots.txt for http://somehost.com/ User-agent: * Disallow: /cgi-bin/ Disallow: /registration # /Disallow robots on registration page Disallow: /login */ private HashMap< String,ArrayList< String>> disallowListCache = new HashMap< String,ArrayList< String>>(); ArrayList< String> errorList= new ArrayList< String>();//错误信息 ArrayList< String> result=new ArrayList< String>(); //搜索到的结果 String startUrl;//开始搜索的起点 int maxUrl;//最大处理的url数 String searchString;//要搜索的字符串(英文) boolean caseSensitive=false;//是否区分大小写 boolean limitHost=false;//是否在限制的主机内搜索 public SearchCrawler(String startUrl,int maxUrl,String searchString){ this.startUrl=startUrl; this.maxUrl=maxUrl; this.searchString=searchString; } public ArrayList< String> getResult(){ return result; } public void run(){//启动搜索线程 crawl(startUrl,maxUrl, searchString,limitHost,caseSensitive); } //检测URL格式 private URL verifyUrl(String url) { // 只处理HTTP URLs. if (!url.toLowerCase().startsWith("http://")) return null; URL verifiedUrl = null; try { verifiedUrl = new URL(url); } catch (Exception e) { return null; } return verifiedUrl; } // 检测robot是否允许访问给出的URL. private boolean isRobotAllowed(URL urlToCheck) { String host = urlToCheck.getHost().toLowerCase();//获取给出RUL的主机 //System.out.println("主机="+host); // 获取主机不允许搜索的URL缓存 ArrayList< String> disallowList =disallowListCache.get(host); // 如果还没有缓存,下载并缓存。 if (disallowList == null) { disallowList = new ArrayList< String>(); try { URL robotsFileUrl =new URL("http://" + host + "/robots.txt"); BufferedReader reader =new BufferedReader(new InputStreamReader(robotsFileUrl.openStream())); // 读robot文件,创建不允许访问的路径列表。 String line; while ((line = reader.readLine()) != null) { if (line.indexOf("Disallow:") == 0) {//是否包含"Disallow:" String disallowPath =line.substring("Disallow:".length());//获取不允许访问路径 // 检查是否有注释。 int commentIndex = disallowPath.indexOf("#"); if (commentIndex != - 1) { disallowPath =disallowPath.substring(0, commentIndex);//去掉注释 } disallowPath = disallowPath.trim(); disallowList.add(disallowPath); } } // 缓存此主机不允许访问的路径。 disallowListCache.put(host, disallowList); } catch (Exception e) { return true; //web站点根目录下没有robots.txt文件,返回真 } } String file = urlToCheck.getFile(); //System.out.println("文件getFile()="+file); for (int i = 0; i < disallowList.size(); i++) { String disallow = disallowList.get(i); if (file.startsWith(disallow)) { return false; } } return true; } private String downloadPage(URL pageUrl) { try { // Open connection to URL for reading. BufferedReader reader = new BufferedReader(new InputStreamReader(pageUrl.openStream())); // Read page into buffer. String line; StringBuffer pageBuffer = new StringBuffer(); while ((line = reader.readLine()) != null) { pageBuffer.append(line); } return pageBuffer.toString(); } catch (Exception e) { } return null; } // 从URL中去掉"www" private String removeWwwFromUrl(String url) { int index = url.indexOf("://www."); if (index != -1) { return url.substring(0, index + 3) + url.substring(index + 7); } return (url); } // 解析页面并找出链接 private ArrayList< String> retrieveLinks(URL pageUrl, String pageContents, HashSet crawledList, boolean limitHost) { // 用正则表达式编译链接的匹配模式。 Pattern p =Pattern.compile("< a\\s+href\\s*=\\s*\"?(.*?)[\"|>]",Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(pageContents); ArrayList< String> linkList = new ArrayList< String>(); while (m.find()) { String link = m.group(1).trim(); if (link.length() < 1) { continue; } // 跳过链到本页面内链接。 if (link.charAt(0) == '#') { continue; } if (link.indexOf("mailto:") != -1) { continue; } if (link.toLowerCase().indexOf("javascript") != -1) { continue; } if (link.indexOf("://") == -1){ if (link.charAt(0) == '/') {//处理绝对地 link = "http://" + pageUrl.getHost()+":"+pageUrl.getPort()+ link; } else { String file = pageUrl.getFile(); if (file.indexOf('/') == -1) {//处理相对地址 link = "http://" + pageUrl.getHost()+":"+pageUrl.getPort() + "/" + link; } else { String path =file.substring(0, file.lastIndexOf('/') + 1); link = "http://" + pageUrl.getHost() +":"+pageUrl.getPort()+ path + link; } } } int index = link.indexOf('#'); if (index != -1) { link = link.substring(0, index); } link = removeWwwFromUrl(link); URL verifiedLink = verifyUrl(link); if (verifiedLink == null) { continue; } /* 如果限定主机,排除那些不合条件的URL*/ if (limitHost && !pageUrl.getHost().toLowerCase().equals( verifiedLink.getHost().toLowerCase())) { continue; } // 跳过那些已经处理的链接. if (crawledList.contains(link)) { continue; } linkList.add(link); } return (linkList); } // 搜索下载Web页面的内容,判断在该页面内有没有指定的搜索字符串 private boolean searchStringMatches(String pageContents, String searchString, boolean caseSensitive){ String searchContents = pageContents; if (!caseSensitive) {//如果不区分大小写 searchContents = pageContents.toLowerCase(); } Pattern p = Pattern.compile("[\\s]+"); String[] terms = p.split(searchString); for (int i = 0; i < terms.length; i++) { if (caseSensitive) { if (searchContents.indexOf(terms[i]) == -1) { return false; } } else { if (searchContents.indexOf(terms[i].toLowerCase()) == -1) { return false; } } } return true; } //执行实际的搜索操作 public ArrayList< String> crawl(String startUrl, int maxUrls, String searchString,boolean limithost,boolean caseSensitive ) { System.out.println("searchString="+searchString); HashSet< String> crawledList = new HashSet< String>(); LinkedHashSet< String> toCrawlList = new LinkedHashSet< String>(); if (maxUrls < 1) { errorList.add("Invalid Max URLs value."); System.out.println("Invalid Max URLs value."); } if (searchString.length() < 1) { errorList.add("Missing Search String."); System.out.println("Missing search String"); } if (errorList.size() > 0) { System.out.println("err!!!"); return errorList; } // 从开始URL中移出www startUrl = removeWwwFromUrl(startUrl); toCrawlList.add(startUrl); while (toCrawlList.size() > 0) { if (maxUrls != -1) { if (crawledList.size() == maxUrls) { break; } } // Get URL at bottom of the list. String url = toCrawlList.iterator().next(); // Remove URL from the to crawl list. toCrawlList.remove(url); // Convert string url to URL object. URL verifiedUrl = verifyUrl(url); // Skip URL if robots are not allowed to access it. if (!isRobotAllowed(verifiedUrl)) { continue; } // 增加已处理的URL到crawledList crawledList.add(url); String pageContents = downloadPage(verifiedUrl); if (pageContents != null && pageContents.length() > 0){ // 从页面中获取有效的链接 ArrayList< String> links =retrieveLinks(verifiedUrl, pageContents, crawledList,limitHost); toCrawlList.addAll(links); if (searchStringMatches(pageContents, searchString,caseSensitive)) { result.add(url); System.out.println(url); } } } return result; } // 主函数 public static void main(String[] args) { if(args.length!=3){ System.out.println("Usage:java SearchCrawler startUrl maxUrl searchString"); return; } int max=Integer.parseInt(args[1]); SearchCrawler crawler = new SearchCrawler(args[0],max,args[2]); Thread search=new Thread(crawler); System.out.println("Start searching..."); System.out.println("result:"); search.start(); } }
发表评论
-
如何让cxf客户端简单支持ssl
2012-06-26 22:52 1037首先生成自我签名的证书,关于如何使用keytool生成证 ... -
webservice cxf 开发实战
2012-05-30 15:51 790webservice cxf 开发实战,请看附件(含源码)。 -
JMeter 使用入门
2011-10-22 14:31 862JMeter 使用入门 <!-- google ... -
Java知识拾遗:三大框架的技术起源
2011-08-02 07:06 829Struts、Hibernate和Spring是我们Ja ... -
分享高效java开发者必备的资源列表
2011-07-14 00:01 723一. Java相关工具资源 1. Eclipse 开 ... -
Office等类型文件的在线编辑
2011-05-10 23:04 132815.4 Office等类型文件的在线编辑自从WebDA ... -
学习:二维码、QR码、J4L-QRCode、java
2011-04-15 18:52 33886开源码 Java 解码器(编码解码)下载:http://s ... -
使用 jsoup 对 HTML 文档进行解析和操作
2011-04-04 21:59 566jsoup 简介 Java 程序在解析 HTML 文档时 ... -
Java通过jsoup实现网页天气数据解析
2011-04-03 10:04 1466import java.io.IOException; ... -
免费的office开发控件weboffice
2011-02-11 14:32 1617免费的office开发控件weboffice,有Java版本的 ... -
Java程序把Word文档直接转换成HTML文件
2011-02-09 09:57 1167Jacob是Java和Windows下的Com桥,通过它我们可 ... -
Tomcat总死可以试一试调一下catalina.bat的这一行
2011-01-12 08:12 886set DEBUG_OPTS=-Xms512m -Xmx102 ... -
Tomcat内存溢出的原因以及解决办法
2010-12-29 13:57 913Tomcat内存溢出的原因 在生产环境中tomcat内存设置 ... -
PHP+MYSQL的OA为何没有Java的值钱
2010-12-25 11:33 871现在市场上的oa基本上可归结为两大阵营,即php阵营和java ... -
MyEclipse 6.0.1配置Tomcat 6服务器【图解】
2010-09-03 14:48 17271 从菜单[Windows]选择[Preferences. ... -
java 查询可用域名
2010-07-20 09:48 1473这段时间在注册域名,咱起步晚,好用的域名都给别人注册了。 想 ... -
使用RSA算法进行加密和解密
2010-07-20 09:36 1722用RSA算法进行加密和解密 一、 生成公钥和私钥 ... -
用javascript与java进行RSA加密与解密
2010-07-19 08:47 1013这几天一直做安全登录,网上查了好多资料,不尽如意。 ... -
公钥加密私钥解密&私钥加密公钥解密
2010-07-16 16:20 1586公钥加密体制1、公钥加密体制用于保密性时,就是公钥加密,私钥解 ... -
Java生成RSA非对称型加密的公钥和私钥(利用java API)
2010-07-16 14:10 1565非对称型加密非常适合多个客户端和服务器之间的秘密通讯,客户端使 ...
相关推荐
这个“图书管理系统”是利用Java Web技术实现的一个典型示例,它包含了数据库的增删改查功能,非常适合初学者学习和参考。 1. **Java Web基础** - **Servlet**:Java Web应用程序的核心组件,用于处理HTTP请求并...
Java 是一种广泛使用的编程语言,用于开发桌面应用程序和 Web 应用程序。在 Web 浏览器中,Java 插件允许用户运行 Java 应用程序和小程序。但是,Java 插件也可能带来安全隐患,例如恶意代码和恶意软件的攻击。 ...
Servlet是Java Web的基础,它是一个运行在服务器端的小程序,用于处理HTTP请求并生成响应。JSP则是一种视图技术,允许开发者在HTML中嵌入Java代码,实现动态页面的生成。JSTL是一套标准的标签库,简化了JSP页面的...
《基于Java Web的旅行攻略网站》是一份关于Java Web程序设计的课程设计报告,旨在构建一个功能丰富的在线旅行服务平台。该平台集成了多种旅游相关的功能,包括热门景点展示、景区点评、旅游信息查询、酒店预订以及...
Java小程序,也称为Java Applet,是用Java语言编写的轻量级应用程序,可以在Web浏览器中运行,为用户提供互动体验。这些小程序可以是各种类型的游戏,例如坦克大战、吃蘑菇游戏、乒乓球游戏和打字游戏,以及一些实用...
4. **Tomcat服务器**:Tomcat是Apache软件基金会的一个开源项目,是Java Servlet和JavaServer Pages(JSP)的Web应用服务器。这些项目可以直接在Tomcat上运行,无需额外配置,体现了Java Web应用的“即插即用”特性...
5. **firstWeb**: 通常是一个简单的Web应用示例,用于初学者理解Java Web开发的基础概念,包括Servlet、JSP以及它们之间的交互。 6. **forum**: 论坛系统是常见的Web应用,这部分代码可能实现了用户注册、发帖、...
【Java Web 学习曲线图】...总之,Java Web的学习曲线图是一个全面的指南,涵盖了从初学者到专家所需掌握的所有关键技能。通过按照这个学习路径逐步推进,开发者可以确保他们在Java Web开发领域建立起扎实的知识体系。
【Java Web 仿造酷狗页面】项目是一个适合初学者实践的编程实例,它涵盖了Web开发中的多个核心知识点,包括前端界面设计、后端服务处理以及数据库交互等。以下是该项目涉及的主要技术点详解: 1. **...
在Java Web开发中,我们经常会遇到各种不同的模块,这些模块为构建复杂的Web应用程序提供了基础。在"java web开发典型模块大全"中,我们看到提到了几个关键的模块或功能,包括Rss、备忘录、搜索引擎、聊天室和留言板...
总的来说,"java拼音搜索pinyin4j"这个项目结合了Java Web开发的基础知识和汉字拼音处理的专业工具,通过Servlet三层架构实现了一个高效的中文搜索功能。开发者可以在这个基础上进一步扩展,如增加拼音排序、语音...
【Java Web从入门到精通光盘18-21】是一个涵盖了Java Web开发基础到进阶的教程资源,旨在帮助初学者系统学习并掌握这一领域。在这个光盘中,你可能会遇到一系列关于Web应用程序开发的知识点,包括但不限于以下内容:...
【基于Java Web的博客系统】是一个综合性的软件开发项目,主要使用Java技术栈构建一个运行在Web环境下的博客平台。这个系统通常包含多个模块,如用户管理、文章发布、评论互动、分类管理、搜索功能等,为用户提供了...
例如,对于一个图书销售的Web应用,需求可能包括用户注册和验证、商品分类浏览、模糊搜索、在线订单提交、购物车功能、用户订单查询、后台管理系统、友好的用户界面、公告展示、首页轮播图以及系统的安全性和稳定性...
【标题】"java+web项目实战大全源码搜索引擎Java实用源码整理learns" 提供的是一个关于Java Web项目的实战教程,重点在于源码搜索引擎的实现。这个项目旨在帮助开发者学习如何在Java环境下构建Web应用程序,并且包含...
《Java Web图书管理系统》是一个基于Java Web技术实现的典型应用,它主要涵盖了Web开发中的核心概念和技术,包括Servlet、JSP、MVC设计模式、数据库交互等。这个系统旨在为用户提供方便快捷的图书借阅、归还、查询等...
这个项目是一个使用Java Web技术开发的博客系统,旨在为用户提供一个在线创作、分享和交流知识的平台。Java Web是Java技术在Web开发中的应用,它包括了Servlet、JSP(JavaServer Pages)、JSTL(JavaServer Pages ...