`
nmj1987
  • 浏览: 30308 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
文章分类
社区版块
存档分类
最新评论

简单爬虫程序

阅读更多

因为以后信息检索要做个作业,今天正好有空,写了个简单的爬虫,真是不能再简单了。先爬了1000个网页,留作以后处理。

接口:WebPage.java

import java.io.File;
import java.net.MalformedURLException;

/*
 * 定义了WebPage对象的基本操作
 */
public interface WebPage
{
	/**根据网页地址将该网页转换成本地文件*/
	public File getPageFile();
	
	/**分析网页的内容
	 * @throws MalformedURLException */
	public void parse() throws MalformedURLException;
}

 实现以测试类:HTMLPage.java

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * 简单的蜘蛛爬虫,运行起来异常会很多,暂时先不管
 * @author gbk
 *
 */
public class HTMLPage extends Thread implements WebPage
{
	private static int pageId = 0;
	private static int MAX_PAGENUM = 1000;
	//存放处理过的URL,保证不重复
	private static Set<String> urls = new HashSet<String>();
	private File localFile;
	private StringBuffer contents;
	private URL url;

	public HTMLPage(URL url)
	{
		this.url = url;
	}
	
	/**
	 * 将网页下载到本地,用来以后分析
	 */
	public File getPageFile()
	{
		int ch = 0;
		contents = new StringBuffer();
		pageId++;
		localFile = new File("d:/html/"+pageId+".txt");
		try
		{
			InputStream inputStream = url.openStream();
			InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
			FileOutputStream fileOutputStream = new FileOutputStream(localFile);
			OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
			while((ch = inputStreamReader.read()) != -1) 
			{ 
				contents.append((char)ch);
				outputStreamWriter.write(ch); 
			} 
			outputStreamWriter.close();
			fileOutputStream.close();
			inputStreamReader.close();
			inputStream.close();
		} catch (FileNotFoundException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		}
		return localFile;
	}
	
    /**
     * 分析网页,将不重复的url地址添加到候选叶中
     */
	public void parse() throws MalformedURLException
	{
        //无法处理内部链接,即不带http
		String regex ="<a.*?href=http://.*?>.*?</a>";
        Pattern pt=Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
        Matcher mt=pt.matcher(contents);
        while(mt.find())
        {         
            //获取网址
            Matcher myurl=Pattern.compile("href=.*?>").matcher(mt.group()); 
            while(myurl.find())
            {
            	String url = myurl.group().replaceAll("href=|>","");
            	//没有做同步,所以最后会稍微多出几个文件
            	if(!urls.contains(url)&&pageId<MAX_PAGENUM)
            	{
            		urls.add(url);
            		//新建一个线程,重复上述操作
            		HTMLPage page = new HTMLPage(new URL(url));
            		page.start();
            	}
            }
            System.out.println();         
        }
	}
	
	public void run()
	{
	    getPageFile();
		try
		{
			parse();
		} catch (MalformedURLException e)
		{
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) throws MalformedURLException
	{
		HTMLPage page = new HTMLPage(new URL("http://www.baidu.com"));
		page.start();
	}
}
 
3
3
分享到:
评论
4 楼 ycq__110 2013-05-20  
String regex ="<a.*?href=http://.*?>.*?</a>";
这个正则用的不好,不够简单,比如我取得图片地址采用的方式:
//使用正则分组来取得http路径
Pattern pa=Pattern.compile("(< *img )(?:[\\W\\w]*?)src=['\"]([^ \"']*)[\\w\\W]*?(/>)"); if(matcher.group(2).indexOf("http")==-1)continue ;//如果不包含,需要加这个页面的根地址
3 楼 307622798 2012-11-06  
里面好像问题挺多的啊!不知道楼主有没有测试这个程序!还请多多指导!
2 楼 donle_elxj 2010-10-06  
Lucene初学者 受益了
1 楼 tntxia 2010-10-04  
就只爬到了个txt文件,有什么用啊

相关推荐

    简易爬虫程序源码

    【简易爬虫程序源码】是一种基础的网络爬虫实现,它主要利用.NET框架中的`WebRequest`和`HttpWebResponse`类来与服务器进行交互,获取网页的HTML源代码。在这个过程中,开发者通常会编写代码来模拟用户浏览网页的...

    爬取煎蛋网图片的简易爬虫程序(2021.6.28可用)

    本文将深入探讨一个针对煎蛋网(Douban Eggs)的简易图片爬虫程序,帮助读者理解如何利用Python进行网页爬取,特别是针对特定网站如煎蛋网的图片资源。 煎蛋网是一个以分享趣图、段子为主的娱乐网站,其丰富的图片...

    Java编写的简单爬虫程序

    Java编写的简单爬虫程序是一种基础的网络数据抓取工具,它主要利用Java语言的特性,结合网络编程的原理,实现对网页内容的自动化获取。在这个项目中,爬虫程序运用了Socket通信来与服务器建立连接,从而获取HTML网页...

    C# 简易爬虫程序 布隆去重算法

    本项目名为"C#简易爬虫程序",其核心在于利用布隆去重算法来处理数据的独特性,确保在抓取网页信息时避免重复。下面将详细阐述爬虫的基本概念、C#实现爬虫的关键技术以及布隆去重算法的工作原理。 首先,爬虫主要由...

    简单爬虫程序(c++实现)

    csdn博客里看的一个大牛写的简单爬虫程序,vs2010下能编译通过,很不错的。

    java实现一个简单爬虫程序

    java实现一个简单的网络爬虫程序,可以抓取网页,并输出网页源代码

    简单的爬虫程序

    【标题】"简单的爬虫程序"揭示了这个项目的核心是一个基于Java编程语言实现的初级网络爬虫。爬虫,或网络爬虫,是自动化抓取互联网信息的一种软件工具,广泛应用于数据分析、信息检索和网站维护等领域。在这个项目中...

    简单的java爬虫程序

    这个"简单的Java爬虫程序"提供了从指定URL开始,按照广度优先策略抓取网页并保存到硬盘的功能。下面我们将深入探讨相关知识点。 1. **广度优先搜索(Breadth-First Search, BFS)** 广度优先搜索是图论中的一种算法...

    python 简单网络爬虫程序

    注释清晰 简单易懂 适合刚刚接触网络爬虫以及python语言的初学者

    python实现简单爬虫程序

    python爬虫抓取网页数据。一个简单的Python爬虫程序,使用requests库来发送HTTP请求,以及BeautifulSoup库来解析HTML内容。

    自己用php做的一个简单的爬虫程序(带说明)

    1. **自制简易爬虫程序.doc**:这可能是一个文档,详细介绍了爬虫的实现步骤、代码逻辑和可能遇到的问题。文档中可能会包括PHP爬虫的基本结构,如使用cURL库或者file_get_contents函数发起HTTP请求,使用DOM或...

    网络爬虫入门程序示例

    在这个名为“网络爬虫入门程序示例”的压缩包文件中,我们可以预期包含了一个或多个用于教学目的的简单爬虫程序。"pachong-work"很可能是一个文件夹,里面包含了源代码、数据文件或者相关的文档,帮助学习者理解网络...

    爬虫程序爬虫程序 java 数据挖掘

    根据给定文件的信息,我们可以提炼出以下关于Java爬虫程序及数据挖掘的相关知识点: ### Java爬虫程序概览 #### 一、Sosoo爬虫框架简介 Sosoo是一款用Java编写的开源网络爬虫框架,适用于进行大规模的数据抓取任务...

    爬虫程序设计.zip

    "爬虫程序设计.zip"这个压缩包包含了一份详细的Python爬虫程序设计报告(Python爬虫程序设计报告.docx)以及一个名为"spidercsdn.zip"的子压缩包,这可能是一个针对特定网站(如CSDN)的爬虫示例。 首先,Python...

    Java网络爬虫程序(源程序和数据库文件)

    在这个"Java网络爬虫程序(源程序和数据库文件)"中,我们看到的是一个完整的爬虫项目,它能够从指定的网页抓取`Title`标签的内容,并将这些信息存储到SQL数据库中。以下是对这个项目中涉及的关键知识点的详细说明:...

    Python2爬虫程序工具

    Python2爬虫程序工具是一种用于自动化网络数据抓取的软件,它由多个核心组件构成,以高效、系统地从互联网上获取信息。在描述中提到的这些组件是爬虫架构的基础,下面将逐一详细解释: 1. **调度器(Scheduler)**...

    基于Python的网络爬虫程序设计.pdf

    本文详细介绍了基于Python语言设计的网络爬虫程序,强调了其针对性强、数据采集速度快和使用简单的优点,并探讨了如何进行后续的数据挖掘研究。 首先,网络爬虫可以分为不同类型的爬虫,包括通用型爬虫、聚焦型爬虫...

    利用python做的一个简单爬虫程序,可获取python百度百科所有链接内容并以网页的内容显示

    Python爬虫程序是一种用于自动化网络数据抓取的工具,它能高效地遍历网页,提取所需信息。在本案例中,我们有一个名为“pypachong”的压缩包,里面包含了一个简单的Python爬虫,用于抓取百度百科上与Python相关的...

Global site tag (gtag.js) - Google Analytics