因为以后信息检索要做个作业,今天正好有空,写了个简单的爬虫,真是不能再简单了。先爬了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();
}
}
分享到:
相关推荐
【简易爬虫程序源码】是一种基础的网络爬虫实现,它主要利用.NET框架中的`WebRequest`和`HttpWebResponse`类来与服务器进行交互,获取网页的HTML源代码。在这个过程中,开发者通常会编写代码来模拟用户浏览网页的...
本文将深入探讨一个针对煎蛋网(Douban Eggs)的简易图片爬虫程序,帮助读者理解如何利用Python进行网页爬取,特别是针对特定网站如煎蛋网的图片资源。 煎蛋网是一个以分享趣图、段子为主的娱乐网站,其丰富的图片...
Java编写的简单爬虫程序是一种基础的网络数据抓取工具,它主要利用Java语言的特性,结合网络编程的原理,实现对网页内容的自动化获取。在这个项目中,爬虫程序运用了Socket通信来与服务器建立连接,从而获取HTML网页...
本项目名为"C#简易爬虫程序",其核心在于利用布隆去重算法来处理数据的独特性,确保在抓取网页信息时避免重复。下面将详细阐述爬虫的基本概念、C#实现爬虫的关键技术以及布隆去重算法的工作原理。 首先,爬虫主要由...
csdn博客里看的一个大牛写的简单爬虫程序,vs2010下能编译通过,很不错的。
java实现一个简单的网络爬虫程序,可以抓取网页,并输出网页源代码
【标题】"简单的爬虫程序"揭示了这个项目的核心是一个基于Java编程语言实现的初级网络爬虫。爬虫,或网络爬虫,是自动化抓取互联网信息的一种软件工具,广泛应用于数据分析、信息检索和网站维护等领域。在这个项目中...
这个"简单的Java爬虫程序"提供了从指定URL开始,按照广度优先策略抓取网页并保存到硬盘的功能。下面我们将深入探讨相关知识点。 1. **广度优先搜索(Breadth-First Search, BFS)** 广度优先搜索是图论中的一种算法...
注释清晰 简单易懂 适合刚刚接触网络爬虫以及python语言的初学者
python爬虫抓取网页数据。一个简单的Python爬虫程序,使用requests库来发送HTTP请求,以及BeautifulSoup库来解析HTML内容。
1. **自制简易爬虫程序.doc**:这可能是一个文档,详细介绍了爬虫的实现步骤、代码逻辑和可能遇到的问题。文档中可能会包括PHP爬虫的基本结构,如使用cURL库或者file_get_contents函数发起HTTP请求,使用DOM或...
在这个名为“网络爬虫入门程序示例”的压缩包文件中,我们可以预期包含了一个或多个用于教学目的的简单爬虫程序。"pachong-work"很可能是一个文件夹,里面包含了源代码、数据文件或者相关的文档,帮助学习者理解网络...
根据给定文件的信息,我们可以提炼出以下关于Java爬虫程序及数据挖掘的相关知识点: ### Java爬虫程序概览 #### 一、Sosoo爬虫框架简介 Sosoo是一款用Java编写的开源网络爬虫框架,适用于进行大规模的数据抓取任务...
"爬虫程序设计.zip"这个压缩包包含了一份详细的Python爬虫程序设计报告(Python爬虫程序设计报告.docx)以及一个名为"spidercsdn.zip"的子压缩包,这可能是一个针对特定网站(如CSDN)的爬虫示例。 首先,Python...
在这个"Java网络爬虫程序(源程序和数据库文件)"中,我们看到的是一个完整的爬虫项目,它能够从指定的网页抓取`Title`标签的内容,并将这些信息存储到SQL数据库中。以下是对这个项目中涉及的关键知识点的详细说明:...
Python2爬虫程序工具是一种用于自动化网络数据抓取的软件,它由多个核心组件构成,以高效、系统地从互联网上获取信息。在描述中提到的这些组件是爬虫架构的基础,下面将逐一详细解释: 1. **调度器(Scheduler)**...
本文详细介绍了基于Python语言设计的网络爬虫程序,强调了其针对性强、数据采集速度快和使用简单的优点,并探讨了如何进行后续的数据挖掘研究。 首先,网络爬虫可以分为不同类型的爬虫,包括通用型爬虫、聚焦型爬虫...
Python爬虫程序是一种用于自动化网络数据抓取的工具,它能高效地遍历网页,提取所需信息。在本案例中,我们有一个名为“pypachong”的压缩包,里面包含了一个简单的Python爬虫,用于抓取百度百科上与Python相关的...