分享

网络爬虫(网络蜘蛛)之网页抓取举例说明

 niefeng2011 2014-01-18

当“蜘蛛”程序出现时,现代意义上的搜索引擎才初露端倪。它实际上是一种电脑“机器人”(Computer Robot),电脑“机器人”是指某个能以人类无法达到的速度不间断地执行某项任务的软件程序。由于专门用于检索信息的“机器人”程序就象蜘蛛一样在网络间爬来爬去,反反复复,不知疲倦。所以,搜索引擎“机器人”程序就被称为“蜘蛛”程序。

现在有越来越多的人热衷于做网络爬虫(网络蜘蛛),也有越来越多的地方需要网络爬虫,比如搜索引擎、资讯采集、舆情监测等等,诸如此类。网络爬虫涉及到的技术(算法/策略)广而复杂,如网页获取、网页跟踪、网页分析、网页搜索、网页评级和结构/非结构化数据抽取以及后期更细粒度的数据挖掘等方方面面,对于新手来说,不是一朝一夕便能完全掌握且熟练应用的,对于作者来说,更无法在一篇文章内就将其说清楚。因此在本篇文章中,我们仅将视线聚焦在网络爬虫的最基础技术——网页抓取方面。

说到网页抓取,往往有两个点是不得不说的,首先是网页编码的识别,另外一个是对网页脚本运行的支持,除此之外,是否支持以POST方式提交请求和支持自动的cookie管理也是很多人所关注的重要方面。其实Java世界里,已经有很多开源的组件来支持各种各样方式的网页抓取了,包括上面提到的四个重点,所以说使用Java做网页抓取还是比较容易的。下面,作者将重点介绍其中的六种方式。

HttpClient
HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页。
(1)实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
(2)支持自动转向
(3)支持 HTTPS 协议
(4)支持代理服务器

(5)支持自动的Cookies管理等

Java爬虫开发中应用最多的一种网页获取技术,速度和性能一流,在功能支持方面显得较为底层,不支持JS脚本执行和CSS解析、渲染等准浏览器功能,推荐用于需要快速获取网页而无需解析脚本和CSS的场景。

范例代码如下:

Java代码   收藏代码
  1. package cn.ysh.studio.crawler.httpclient;  
  2.   
  3. import org.apache.http.client.HttpClient;  
  4. import org.apache.http.client.ResponseHandler;  
  5. import org.apache.http.client.methods.HttpGet;  
  6. import org.apache.http.impl.client.BasicResponseHandler;  
  7. import org.apache.http.impl.client.DefaultHttpClient;  
  8.   
  9. /** 
  10.  * 基于HtmlClient抓取网页内容 
  11.  * 百搜技术网:http://www.
  12.  * @author www. 
  13.  */  
  14. public class HttpClientTest {  
  15.   
  16.     public static void main(String[] args) throws Exception {  
  17.         //目标页面  
  18.         String url = "http://www.";  
  19.         //创建一个默认的HttpClient  
  20.         HttpClient httpclient = new DefaultHttpClient();  
  21.         try {  
  22.             //以get方式请求网页http://www.  
  23.             HttpGet httpget = new HttpGet(url);  
  24.             //打印请求地址  
  25.             System.out.println("executing request " + httpget.getURI());  
  26.             //创建响应处理器处理服务器响应内容  
  27.             ResponseHandlerresponseHandler = new BasicResponseHandler();  
  28.             //执行请求并获取结果  
  29.             String responseBody = httpclient.execute(httpget, responseHandler);  
  30.             System.out.println("----------------------------------------");  
  31.             System.out.println(responseBody);  
  32.             System.out.println("----------------------------------------");  
  33.         } finally {  
  34.             //关闭连接管理器  
  35.             httpclient.getConnectionManager().shutdown();  
  36.         }  
  37.   
  38.     }  
  39. }  

Jsoup
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

网页获取和解析速度飞快,推荐使用。
主要功能如下:

更多详情请参考原文:http://www./detail_137145501509367.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多