用JAVA实现简单爬虫循环抓取
来源:互联网 发布:酷盛网络加速器 编辑:程序博客网 时间:2024/06/01 19:15
原理:
1.给一个URL,爬虫爬取这个url;
2.url中提取HTML中a 标签内容获取新的url;
3.再通过新的url再循环以上;
实现代码:
import java.io.*;import java.net.*;public class Dome1 { public static void main(String[] args){ String s1="<a href=\"http://"; String url="http://www.dangdang.com"; String [] urlconntion=new String[50]; Crawler cr=new Crawler(url,s1,urlconntion); int i=0; String s2=cr.find(); //相当于DFS算法,如果爬取到最深的url,已无新的url时,则返回最开始的url开始循环; while(urlconntion[30]==null){ if(s2==null){ cr=new Crawler(url,s1,urlconntion); s2=cr.find(); } System.out.println(s2); cr=new Crawler(s2, s1,urlconntion); urlconntion[i++]=s2; s2=cr.find(); } System.out.println("打印完毕"); }}class Crawler { String url=null; String prefix=null; //爬去过的url地址集合 String[] urlconntion=null; //爬虫类的构造函数 Crawler(String url,String prefix,String[] urlconntion){ this.url=url; this.prefix=prefix; this.urlconntion=urlconntion; } //根据类的url开始爬取新的url实现循环爬取 public String find(){ URL u=null; URLConnection con=null; BufferedReader bfr=null; String rpurl=null; try { u=new URL(url); con=u.openConnection(); InputStream is=con.getInputStream(); bfr=new BufferedReader(new InputStreamReader(is)); String s; while((s=bfr.readLine())!=null){ if(s.indexOf(prefix)>=0) { rpurl=getUrl(s); if(urlrepetition(rpurl)!=-1){ return rpurl; } } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { bfr.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return null; } //判断url是否被爬去过,如果被爬去可返回-1,如果没有则返回1 public int urlrepetition(String rpurl){ int i=0; while(urlconntion[i]!=null){ if(urlconntion[i++].equals(rpurl)){ return -1; } } return 1; } //重爬去过的源码中截取url地址; public String getUrl(String s){ int index1=s.indexOf(prefix); s=s.substring(index1+9); int index2=s.indexOf("\""); s=s.substring(0,index2); return s; }}
a标签的内容形式很多,如href=”www.baidu.com” target=”_blank”,我们只需要www.baidu.com,所以我们只需要通过String的,substring函数来截取这部分即可得到新的url并返回。
程序运行结果:
存在的问题:
1.通过java获取的网页无法识别中文,出现乱码
2.获取的url内容没判断是否合法或是否能使用,如果url无法使用则程序会出现异常
3.
while((s=bfr.readLine())!=null){ if(s.indexOf(prefix)>=0) { rpurl=getUrl(s); if(urlrepetition(rpurl)!=-1){ return rpurl; } } }
url的源码内容是按行读取的,如果这一行第一个url获取被爬去过了,那么这一行就被跳过去了,无法获取这一行中第二个url。
0 1
- 用JAVA实现简单爬虫循环抓取
- 用JAVA实现简单爬虫多线程抓取
- 简单的java爬虫抓取网页实现代码(未测试)
- java爬虫实现数据抓取
- 网页爬虫抓取URL简单实现
- python实现简单爬虫抓取图片
- java爬虫实战简单用Jsoup框架进行网页爬虫(如抓取网页图片)
- Java爬虫,信息抓取的实现
- java实现网络爬虫--抓取网站数据
- Java爬虫,信息抓取的实现
- Java爬虫,信息抓取的实现
- Java爬虫,信息抓取的实现
- Java爬虫,信息抓取的实现
- Java爬虫,信息抓取的实现
- Java爬虫,信息抓取的实现
- Java爬虫,信息抓取的实现 [转]
- Java爬虫,信息抓取的实现
- Java爬虫,信息抓取的实现
- WSTMall助力站长,以店铺为据点做分布式O2O
- 微软CRM
- DataSet用法详细 转
- 字典转模型的过程中,空值和id特殊字符的处理
- 【LeetCode】Happy Number
- 用JAVA实现简单爬虫循环抓取
- 欢迎使用CSDN-markdown编辑器
- [Android]网络摄像头抓拍功能的折腾
- ios开发 向右滑动手势实现返回.在NavigationController中如何设置
- Java设计模式之单例模式
- Java4Android-面向对象基础1
- LeetCode: Reverse integer
- 面试经验
- HDU4638:Group(线段树离线处理)