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以一个列表的形式返回
}
}

抓取效果:

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

最新文章

  1. 【数据库】_由2000W多条开房数据引发的思考、实践----给在校生的一个真实【练耙场】,同学们,来开始一次伟大的尝试吧。
  2. spring aop 声明式事务管理
  3. LeetCode &quot;Russian Doll Envelopes&quot;
  4. Raspberry Pi3 ~ 配置网络
  5. POJ-魔兽世界之一:备战
  6. 支付宝打造公共账号业务网关, RSA密钥对生成
  7. XTU 1245 Hamiltonian Path
  8. GateSvr的设计2
  9. C Run-Time Error R6034问题的解决
  10. 程序员的自我救赎---1.4.3: 核心框架讲解(MVC)
  11. Elasticsearch强制重置未分配的分片(unassigned)
  12. 学习资料分享(Java第一行代码视频)&lt;susmote.com&gt;
  13. 当你「ping 一下」的时候,你知道它背后的逻辑吗?
  14. AV-TEST杀毒软件能力测试(2018年1月-12月)杀毒软件排名
  15. 01-HTML介绍
  16. [转]Linux性能分析工具汇总合集
  17. WEB技术路线图
  18. git 日常
  19. 【转】关于HTTP服务器每个客户端2个连接的限制
  20. 20172319 2018.04.01-04.11 《Java程序设计》第5周学习总结

热门文章

  1. day4作业(基本运算流程if for)
  2. Linux之文档与目录结构 (/ 用法, 相对路径,绝对路径)
  3. Ubantu下安装jdk 教程
  4. eclipse添加缺失的包/src/main/resource
  5. 【转】AD常用端口
  6. 50.纯 CSS 创作一个永动的牛顿摆
  7. NodeJS + React + Webpack + Echarts
  8. scrapy爬行乌云网公开漏洞程序的分析
  9. Deque 双端队列 Stack 堆栈
  10. 使用PHP的反射Reflection获取对象信息