Java写的爬虫的基本程序.docx
- 文档编号:8627918
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:13
- 大小:20.50KB
Java写的爬虫的基本程序.docx
《Java写的爬虫的基本程序.docx》由会员分享,可在线阅读,更多相关《Java写的爬虫的基本程序.docx(13页珍藏版)》请在冰豆网上搜索。
Java写的爬虫的基本程序
这是一个web搜索的基本程序,从命令行输入搜索条件(起始的URL、处理url的最大数、要搜索的字符串),
它就会逐个对Internet上的URL进行实时搜索,查找并输出匹配搜索条件的页面。
这个程序的原型来自《java编程艺术》,
为了更好的分析,站长去掉了其中的GUI部分,并稍作修改以适用jdk1.5。
以这个程序为基础,可以写出在互联网上搜索
诸如图像、邮件、网页下载之类的“爬虫”。
先请看程序运行的过程:
D:
\java>javacSearchCrawler.java(编译)
D:
\java>javaSearchCrawlerhttp:
//127.0.0.1:
8080/zz3zcwbwebhome/index.jsp20java
Startsearching...
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>javaSearchCrawler20java
Startsearching...
result:
searchString=java
D:
\java>
下面是这个程序的源码
Java代码
1.importjava.util.*;
2..*;
3.importjava.io.*;
4.importjava.util.regex.*;
5.
6.//搜索Web爬行者
7.publicclassSearchCrawlerimplementsRunnable{
8.
9./*disallowListCache缓存robot不允许搜索的URL。
Robot协议在Web站点的根目录下设置一个robots.txt文件,
10.*规定站点上的哪些页面是限制搜索的。
搜索程序应该在搜索过程中跳过这些区域,下面是robots.txt的一个例子:
11.#robots.txtfor
12.User-agent:
*
13.Disallow:
/cgi-bin/
14.Disallow:
/registration#/Disallowrobotsonregistrationpage
15.Disallow:
/login
16.*/
17.
18.
19.privateHashMap
20.ArrayList
21.ArrayList
22.StringstartUrl;//开始搜索的起点
23.intmaxUrl;//最大处理的url数
24.StringsearchString;//要搜索的字符串(英文)
25.booleancaseSensitive=false;//是否区分大小写
26.booleanlimitHost=false;//是否在限制的主机内搜索
27.
28.publicSearchCrawler(StringstartUrl,intmaxUrl,StringsearchString){
29.this.startUrl=startUrl;
30.this.maxUrl=maxUrl;
31.this.searchString=searchString;
32.}
33.
34.publicArrayList
35.returnresult;
36.}
37.
38.publicvoidrun(){//启动搜索线程
39.
40.crawl(startUrl,maxUrl,searchString,limitHost,caseSensitive);
41.}
42.
43.
44.//检测URL格式
45.privateURLverifyUrl(Stringurl){
46.//只处理HTTPURLs.
47.if(!
url.toLowerCase().startsWith("http:
//"))
48.returnnull;
49.
50.URLverifiedUrl=null;
51.try{
52.verifiedUrl=newURL(url);
53.}catch(Exceptione){
54.returnnull;
55.}
56.
57.returnverifiedUrl;
58.}
59.
60.//检测robot是否允许访问给出的URL.
61.privatebooleanisRobotAllowed(URLurlToCheck){
62.Stringhost=urlToCheck.getHost().toLowerCase();//获取给出RUL的主机
63.//System.out.println("主机="+host);
64.
65.//获取主机不允许搜索的URL缓存
66.ArrayList
67.
68.//如果还没有缓存,下载并缓存。
69.if(disallowList==null){
70.disallowList=newArrayList
71.try{
72.URLrobotsFileUrl=newURL("http:
//"+host+"/robots.txt");
73.BufferedReaderreader=newBufferedReader(newInputStreamReader(robotsFileUrl.openStream()));
74.
75.//读robot文件,创建不允许访问的路径列表。
76.Stringline;
77.while((line=reader.readLine())!
=null){
78.if(line.indexOf("Disallow:
")==0){//是否包含"Disallow:
"
79.StringdisallowPath=line.substring("Disallow:
".length());//获取不允许访问路径
80.
81.//检查是否有注释。
82.intcommentIndex=disallowPath.indexOf("#");
83.if(commentIndex!
=-1){
84.disallowPath=disallowPath.substring(0,commentIndex);//去掉注释
85.}
86.
87.disallowPath=disallowPath.trim();
88.disallowList.add(disallowPath);
89.}
90.}
91.
92.//缓存此主机不允许访问的路径。
93.disallowListCache.put(host,disallowList);
94.}catch(Exceptione){
95.returntrue;//web站点根目录下没有robots.txt文件,返回真
96.}
97.}
98.
99.
100.Stringfile=urlToCheck.getFile();
101.//System.out.println("文件getFile()="+file);
102.for(inti=0;i 103.Stringdisallow=disallowList.get(i); 104.if(file.startsWith(disallow)){ 105.returnfalse; 106.} 107.} 108. 109.returntrue; 110.} 111. 112. 113. 114. 115.privateStringdownloadPage(URLpageUrl){ 116.try{ 117.//OpenconnectiontoURLforreading. 118.BufferedReaderreader= 119.newBufferedReader(newInputStreamReader(pageUrl.openStream())); 120. 121.//Readpageintobuffer. 122.Stringline; 123.StringBufferpageBuffer=newStringBuffer(); 124.while((line=reader.readLine())! =null){ 125.pageBuffer.append(line); 126.} 127. 128.returnpageBuffer.toString(); 129.}catch(Exceptione){ 130.} 131. 132.returnnull; 133.} 134. 135.//从URL中去掉"www" 136.privateStringremoveWwwFromUrl(Stringurl){ 137.intindex=url.indexOf(": //www."); 138.if(index! =-1){ 139.returnurl.substring(0,index+3)+ 140.url.substring(index+7); 141.} 142. 143.return(url); 144.} 145. 146.//解析页面并找出链接 147.privateArrayList 148.booleanlimitHost) 149.{ 150.//用正则表达式编译链接的匹配模式。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 爬虫 基本 程序