网络爬虫是一种可以自动提取网页的程序,它可以为搜索引擎从万维网上下载网页,当然它也是搜索引擎的重要组成部分。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。较为复杂些的网络爬虫,则会根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索。
爬虫的三个目标:
(1)对抓取目标的描述或定义;
(2)对网页或数据的分析与过滤;
(3)对URL的搜索策略;
抓取目标的描述和定义是决定网页分析算法与URL搜索策略如何制订的基础。而网页分析算法和候选URL排序算法是决定搜索引擎所提供的服务形式和爬虫网页抓取行为的关键所在。这两个部分的算法是紧密相关的。
互联网<--->网络爬虫模块<--->网页库<--->索引模块<--->索引库<--->用户查询模块<--->最终用户
网页搜索策略可以分为深度优先、广度优先和最佳优先三种。深度优先在很多情况下会导致爬虫的陷入(trapped)问题。目前常见的是广度优先和最佳优先。
Java实现获取网页源码的步骤:
(1)新建URL对象,表示要访问的网址。如:url=new URL("http://www.cuhk.edu.hk");
(2)建立HTTP连接,返回对象urlConnection对象。如urlConnection=(HttpURLConnection)url.openConnection();
(3)获取相应HTTP状态码。如responsecode=urlConnection.getResponseCode();
(4)如果HTTP状态码为200,表示成功。从urlConnection对象获取输入流对象来获取请求的网页源代码。
Java获取网页源码的代码:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class Main
{
public static void main(String args[])
{
URL url;
int responsecode;
HttpURLConnection urlConnection;
BufferedReader reader;
String line;
try
{
url=new URL("http://www.ahu.edu.cn");
urlConnection = (HttpURLConnection)url.openConnection();
responsecode=urlConnection.getResponseCode();
if(responsecode==200)
{
reader=new BufferedReader(new InputStreamReader(urlConnection.getInputStream(),"UTF-8"));
while((line=reader.readLine())!=null)
{
System.out.println(line);
}
}
else{
System.out.println("获取不到网页的源码,服务器响应代码为:"+responsecode);
}
}
catch(Exception e)
{
System.out.println("获取不到网页的源码,出现异常:"+e);
}
}
};