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 }
抓取效果:
可以对抓取到的url进行提取。