Java url爬虫

java 爬虫抓取

可以在线编辑java代码的连接 http://www.runoob.com

 1 import java.util.Scanner;
 2 import java.util.ArrayList;
 3 import java.net.*;
 4 public class Spider {
 5     public static void main(String[] args) {
 6         String  url = "http://www.runoob.com";
 7         craweler(url);
 8     }
 9 
10     public static void craweler(String startingURL) {
11         int Max_item = 10000; // 爬虫抓取最大条目数
12         ArrayList<String> listOfPendingURLs=new ArrayList<>();
13         ArrayList<String> listOfTraversedURLs=new ArrayList<>();
14         //将起始的URL添加到listOfPendingURLs,然后通过一个while循环重复处理listOfPendingURLs中每一个URL
15         listOfPendingURLs.add(startingURL);
16         while(!listOfPendingURLs.isEmpty()&&listOfTraversedURLs.size()<=Max_item) {
17             //将列表中第一个RUL去除,如果该RUL没有被处理过则对其进行处理
18             String urlString=listOfPendingURLs.remove(0);
19             if(!listOfTraversedURLs.contains(urlString)) {
20                 listOfTraversedURLs.add(urlString);
21                 System.out.println("url:"+urlString);
22                 //程序使用foreach循环,将页面中的每个不存在listOfTraversedURLs中的URL添加到listOfPendingURLs中
23                 for(String s:getSubURLs(urlString)) {
24                     if(!listOfTraversedURLs.contains(s)) 
25                         listOfPendingURLs.add(s);
26                 }
27 
28             }
29         }
30     }
31 
32     public static ArrayList<String> getSubURLs(String urlString) {
33         //该方法为每个给定的URL返回一个URL列表
34         ArrayList<String> list=new ArrayList<>();
35         try {
36             int current=0;
37             URL url=new URL(urlString);
38             Scanner input=new Scanner(url.openStream());
39             while(input.hasNext()) {
40                 String line=input.nextLine();//从Web读取每一行
41                 current=line.indexOf("http:",current);//寻找该行中的URL
42                 while(current>0) {
43                     int endIndex=line.indexOf(""",current);//假设URL以引号"结束
44                     if(endIndex>0) {
45                         list.add(line.substring(current,endIndex));//一行中可能包含多个URL,
46                         current=line.indexOf("http:",endIndex);//方法继续寻找下一个URL
47                     }
48                     else current=-1;//如果该行中没有发现URL,curr设为-1
49                 }
50             }
51         }
52         catch (Exception ex) {
53             System.out.println("抓取异常: "+ex.getMessage());
54         }
55         return list; //页面中包含的URL以一个列表的形式返回
56     }
57 }
View Code

抓取效果:

可以对抓取到的url进行提取。

欢迎访问我的博客! http://www.cnblogs.com/1187163927ch/
原文地址:https://www.cnblogs.com/1187163927ch/p/9408553.html