Java url爬虫

时间:2024-04-15 13:14:38

java 爬虫抓取

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

 import java.util.Scanner;
import java.util.ArrayList;
import java.net.*;
public class Spider {
public static void main(String[] args) {
String url = "http://www.runoob.com";
craweler(url);
} public static void craweler(String startingURL) {
int Max_item = 10000; // 爬虫抓取最大条目数
ArrayList<String> listOfPendingURLs=new ArrayList<>();
ArrayList<String> listOfTraversedURLs=new ArrayList<>();
//将起始的URL添加到listOfPendingURLs,然后通过一个while循环重复处理listOfPendingURLs中每一个URL
listOfPendingURLs.add(startingURL);
while(!listOfPendingURLs.isEmpty()&&listOfTraversedURLs.size()<=Max_item) {
//将列表中第一个RUL去除,如果该RUL没有被处理过则对其进行处理
String urlString=listOfPendingURLs.remove(0);
if(!listOfTraversedURLs.contains(urlString)) {
listOfTraversedURLs.add(urlString);
System.out.println("url:"+urlString);
//程序使用foreach循环,将页面中的每个不存在listOfTraversedURLs中的URL添加到listOfPendingURLs中
for(String s:getSubURLs(urlString)) {
if(!listOfTraversedURLs.contains(s))
listOfPendingURLs.add(s);
} }
}
} public static ArrayList<String> getSubURLs(String urlString) {
//该方法为每个给定的URL返回一个URL列表
ArrayList<String> list=new ArrayList<>();
try {
int current=0;
URL url=new URL(urlString);
Scanner input=new Scanner(url.openStream());
while(input.hasNext()) {
String line=input.nextLine();//从Web读取每一行
current=line.indexOf("http:",current);//寻找该行中的URL
while(current>0) {
int endIndex=line.indexOf("\"",current);//假设URL以引号"结束
if(endIndex>0) {
list.add(line.substring(current,endIndex));//一行中可能包含多个URL,
current=line.indexOf("http:",endIndex);//方法继续寻找下一个URL
}
else current=-1;//如果该行中没有发现URL,curr设为-1
}
}
}
catch (Exception ex) {
System.out.println("抓取异常: "+ex.getMessage());
}
return list; //页面中包含的URL以一个列表的形式返回
}
}

抓取效果:

Java url爬虫

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