有关爬虫的
来源:互联网 发布:网络信息管理新规 编辑:程序博客网 时间:2024/06/06 15:47
最近在写一个有关于爬虫的小程序,其实不能算是一个比较复杂的爬虫,只是由于一个数据挖掘的项目需要采集数据,所以就临时写了一个简单的爬虫,下面是我在网上查找了相关的代码和资料之后自己修改的一个,可以用,这算是一个广度优先遍历的爬虫,由于项目需要目前这个爬虫的深度为2,层次更深的爬取程序可能会有一些问题,如重复网址的处理,死循环等等,暂时还在修改当中,至于深度优先遍历的爬虫还没有进行仔细考虑和实现,以后会进行考虑的。
package spider3;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net.URL;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;import java.net.*;import java.io.*;import java.util.regex.*;import spider3.HttpTest;/*根据指定的规则,通过构造正则表达式获取网址*/public class Urls{ private String startUrl; //开始采集网址 String urlContent; String ContentArea; private String strAreaBegin ,strAreaEnd ; //采集区域开始采集字符串和结束采集字符串 String strContent;//获得的采集内容 String[] allUrls; //采集到的所有网址 ArrayList< String> linkList = new ArrayList< String>(); int max=0; private String regex; //采集规则 /** * 初始化构造函数 strAreaBegin 和strAreaEnd * @param strAreaBegin * @param strAreaEnd */ public Urls (String strAreaBegin,String strAreaEnd) { this.strAreaBegin=strAreaBegin; this.strAreaEnd=strAreaEnd; } /** * 获得开始采集网址 * @param startUrl */ public void setStartUrl(String startUrl) { this.startUrl=startUrl; // System.out.println("In setStartUrl===:" + startUrl); } /** * 获得网址所在内容; */ public void getUrlContent() { StringBuffer is=new StringBuffer(); try { URL myUrl=new URL(startUrl); //System.out.println("In getUrlContent===:" + startUrl); BufferedReader br= new BufferedReader(new InputStreamReader(myUrl.openStream(),"gb2312")); String s; while((s=br.readLine())!=null) { is.append(s); //System.out.println(s); } urlContent=is.toString(); } catch(Exception e) { System.out.println("网址文件未能输出"); e.printStackTrace(); } } /** * 获得网址所在的匹配区域部分 */ public void getContentArea() { int pos1=0,pos2=0; pos1= urlContent.indexOf(strAreaBegin)+strAreaBegin.length(); pos2=urlContent.indexOf(strAreaEnd,pos1); ContentArea=urlContent.substring(pos1,pos2); } public void Urls() { int i=0; //String regex ="<a href="?'?http://[a-zA-Z0-9]+/.[a-zA-Z0-9]+/.[a-zA-Z]+/?[/.?[/S|/s]]+[a>]$"; //String regex ="<a.*?/a>"; String regex ="href\\s*=\\s*\"http?(.*?)[\"|>]"; //String regex ="http://.*?>"; Pattern pt=Pattern.compile(regex); Matcher mt=pt.matcher(ContentArea); while(mt.find()) { String link = mt.group().trim(); link = link.replace("href=\"", ""); link = link.replace("\"", ""); System.out.println(link); i++; if (link.length() < 1) { continue; } // 跳过链到本页面内链接。 if (link.charAt(0) == '#') { continue; } if (link.charAt(0) == '/') { continue; } if (link.indexOf("mailto:") != -1) { continue; } if (link.toLowerCase().indexOf("javascript") != -1) { continue; } int index = link.indexOf('#'); if (index != -1) { link = link.substring(0, index); } if(link.contains("item"))//符合规则包含特定字符的超链接才记录入链表 { linkList.add(link); } } System.out.println("共有"+i+"个符合结果"); } public void content() throws Exception { for(int i =1; i<linkList.size();i++) { System.out.println("in result========:" + linkList.get(i)); // setStartUrl(linkList.get(i));// getUrlContent();// getContentArea();// Urls(); HttpTest client = new HttpTest(linkList.get(i)); client.run(); max++; } System.out.println("处理完成:" + max); } //获取url网址 public ArrayList< String> getResult(){ return linkList; } public String getRegex() { return regex; } class UrlAndTitle { String myURL; String title; } public static void main(String[] args) throws Exception { Urls myurl=new Urls("<body","/body>"); myurl.setStartUrl("http://"); myurl.getUrlContent(); myurl.getContentArea(); myurl.Urls(); System.out.println("------------------------------------------------------------------------"); myurl.content(); }}
- 有关爬虫的
- Python有关爬虫的一些总结
- 有关网络爬虫的一些基本概念(一)
- 有关爬虫浏览量的问题
- 【爬虫之路】一点有关学习BeautifulSoup的笔记
- 有关搜索引擎爬虫抓取原理浅析
- [爬虫] 爬虫的实现
- python爬虫 根据关键字在新浪网站查询跟关键字有关的新闻条数(按照时间查询)
- 爬虫学习01 什么是爬虫 爬虫的分类
- 有关Android 访问WCF的有关问题
- python 爬虫试手,好简单的爬虫
- 妹子图爬虫..新手的爬虫
- 爬虫——使用BeautifulSoup4的爬虫
- 爬虫与反爬虫之间的战争
- python爬虫:爬虫的工作原理
- 多线程爬虫(提升爬虫的速度)
- 有关TDataSet的研究
- 有关EXCEL的技巧!!!
- win7(windows7)下java环境变量配置方法
- CSS中元素水平居中显示的方法
- zend studio 8 配置ssh ftp
- Libvirt虚拟机网络配置
- fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 有关爬虫的
- 长英文自动换行的最终解决方法
- 如何设置ubuntu和redhat网络接口
- C语言结构体
- Make sure the Cursor is initialized correctly before accessing data from it.
- php应用数据库连接中的单例模式
- 【Android】菜单功能的实现:使用Java代码
- 将java源码打成jar包的两种方法
- What does grep stand for in Linux operating system?