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进行提取。

Java url爬虫的更多相关文章

  1. Java 网络爬虫获取网页源代码原理及实现

    Java 网络爬虫获取网页源代码原理及实现 1.网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL ...

  2. 开源的49款Java 网络爬虫软件

    参考地址 搜索引擎 Nutch Nutch 是一个开源Java 实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具.包括全文搜索和Web爬虫. Nutch的创始人是Doug Cutting, ...

  3. java正则表达式之java小爬虫

    这个java小爬虫, 功能很简单,只有一个,抓取网上的邮箱.用到了javaI/O,正则表达式. public static void main(String[] args) throws IOExce ...

  4. 【转】44款Java 网络爬虫开源软件

    原帖地址 http://www.oschina.net/project/lang/19?tag=64&sort=time 极简网络爬虫组件 WebFetch WebFetch 是无依赖极简网页 ...

  5. java网络爬虫基础学习(三)

    尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort= ...

  6. java网络爬虫基础学习(一)

    刚开始接触java爬虫,在这里是搜索网上做一些理论知识的总结 主要参考文章:gitchat 的java 网络爬虫基础入门,好像要付费,也不贵,感觉内容对新手很友好. 一.爬虫介绍 网络爬虫是一个自动提 ...

  7. Java 图片爬虫,java打包jar文件

    目录 1. Java 图片爬虫,制作 .jar 文件 spider.java 制作 jar 文件 添加执行权限 1. Java 图片爬虫,制作 .jar 文件 spider.java spider.j ...

  8. java开发爬虫Deno

    java开发爬虫Deno 身为一个程序员不会两三手爬虫怎么能在行业里立足啊,这是开发中自己写的一个java爬虫的Demo,供大家参考. java爬虫的开发依赖于jsoup.jar 直接上代码 publ ...

  9. Java基础-爬虫实战之爬去校花网网站内容

    Java基础-爬虫实战之爬去校花网网站内容 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 爬虫这个实现点我压根就没有把它当做重点,也没打算做网络爬虫工程师,说起爬虫我更喜欢用Pyt ...

随机推荐

  1. 【Jmeter自学】Linux环境下Jmeter运行

    ==================================================================================================== ...

  2. Suricata在ubuntu14.04环境下安装

    简介 Suricata是一款高性能的网络IDS.IPS和网络安全监控引擎.它是由the Open Information Security Foundation开发,是一款开源的系统,现在的NIDS领 ...

  3. Oracle 日志归档 自动清理

    exp emis/emis@orcl file=d:\backup\oracle\oracle%date:~0,10%.dmp owner=emis log=d:\backup\oracle\orac ...

  4. gentoo kvm qemu virt-manager - Unable to complete install: error creating macvtap interface macvtap0@: Operation not supported'

    碰到这个一般是内核没有开启相应的 macvtap 选项,开启相应选项后,就不会报错了. Device Drivers ---> Network Device Support ---> &l ...

  5. 一个不错的PHP二维数组排序函数简单易用存用

    一个不错的PHP二维数组排序函数简单易用存用 传入数组,传入排序的键,传入排序顺序 public function array_sort($arr,$keys,$type='asc') { $keys ...

  6. python中的center

    center(self,width,fillchar=None)让字符串居中显示,width定义字长度,fillchar定义空白处填充,不填写默认为空白 举个列子: 1 a = "hello ...

  7. java 权重随机算法实现

    import java.util.*; /** * 权重随机算法实现 * a b c d 对应权重范围 --- [0,1).[1,3).[3,6).[6,10) */ public class Ran ...

  8. HTML5 图片宽高自适应,居中裁剪不失真

    一,使用 JS,先上效果图,右图为定死宽高的效果,左图为处理之后的 1, 主要思路是,在图片 onload 后,将图片的宽高比和 div 容器的宽高比进行比较, 2, 从而确定拉伸或者压缩之后是宽还是 ...

  9. 使用expect解决shell交互问题

    比如ssh的时候,如果没设置免密登陆,那么就需要输入密码.使用expect可以做成自动应答 1.expect检测和安装 sudo apt-get install tcl tk expect 2.脚本样 ...

  10. synchronized 和 lock 的区别

    1.Lock不是Java语言内置的,synchronized是Java语言的关键字,因此是内置特性.Lock是一个类,通过这个类可以实现同步访问: 2.Lock和synchronized有一点非常大的 ...