Nutch

Nutch属于分布式爬虫,爬虫使用分布式,主要是解决两个问题:1)海量URL管理;2)网速。如果要做搜索引擎,Nutch1.x是一个非常好的选择。Nutch1.x和solr或者es配合,就可以构成一套非常强大的搜索引擎,否则尽量不要选择Nutch作为爬虫。用Nutch进行爬虫的二次开发,爬虫的编写和调试所需的时间,往往是单机爬虫所需的十倍时间不止。

Heritrix

Heritrix 是个“Archival Crawler”——来获取完整的、精确的、站点内容的深度复制。包括获取图像以及其他非文本内容。抓取并存储相关的内容。对内容来者不拒,不对页面进行内容上的修改。重新爬行对相同的URL不针对先前的进行替换。爬虫主要通过Web用户界面启动、监控和调整,允许弹性的定义要获取的url。

crawler4j

crawler4j是Java实现的开源网络爬虫。提供了简单易用的接口,可以在几分钟内创建一个多线程网络爬虫。

WebCollector

WebCollector使用了Nutch的爬取逻辑(分层广度遍历),Crawler4j的的用户接口(覆盖visit方法,定义用户操作),以及一套自己的插件机制,设计了一套爬虫内核。

WebMagic

WebMagic项目代码分为核心和扩展两部分。核心部分(webmagic-core)是一个精简的、模块化的爬虫实现,而扩展部分则包括一些便利的、实用性的功能。WebMagic的架构设计参照了Scrapy,目标是尽量的模块化,并体现爬虫的功能特点。

1. HttpClient&Jsoup

爬虫实现的技术有很多,对于java语言来说,有很多的选择,可以是很多开源的爬虫框架,也可以使用基本httpClient,Jsoup来爬取网页

1.1 HttpClient简介

HttpClient 是 apache 组织下面的一个用于处理 HTTP 请求和响应的开源工具。它不是一个浏览器,也不处理客户端缓存等浏览器的功能。它只是一个类库!它在 JDK 的基本类库基础上做了更好的封装。

HttpClient 项目依赖于 HttpCore(处理核心的 HTTP 协议)、commons-codec(处理与编码有关的问题的项目)和 commons-logging(处理与日志记录有关问题的项目)。如果你希望能够通过 HttpClient 向服务器上传文件等与 multipart 编码类型有关的请求,以及其它复杂的MIME 类型,那么,你需要另外一个依赖包:HttpMime(它是专门处理与 MIME 类型有关问题的项目),在下载的 HttpClient 包中(下载地址为:http://hc.apache.org/downloads.cgi)已经包含了 HttpMime

项目中使用的 HttpClient 版本为:4.0.1GA,httpClient需要有以下依赖包:

httpclient-4.0.1.jar

httpcore-4.0.1.jar

httpmime-4.0.1.jar

又依赖于 mime4j(apache-mime4j-0.6.jar)

commons-codec-1.4.jar

commons-logging-1.1.1.jar

commons-io-1.4.jar – 为了更方便处理与 IO 有关的需求

1.1.1 HttpClient抓取网页流程

使用HttpClient发送请求、接收响应很简单,一般需要如下几步:

1. 创建HttpClient对象。

2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。

3. 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。

4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。

5. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。

6. 释放连接。无论执行方法是否成功,都必须释放连接。

1.1.2 简单抓取代码

//使用httpClient发送请求,使用Jsoup分析网页

public static void main(String[] args) throws Exception {

//创建httpClient客户端

HttpClient hClient = new DefaultHttpClient();

//创建http发送请求对象,Httpget

HttpGet hget = new HttpGet("http://www.itcast.cn");

//设置请求头

hget.setHeader("Cookie", "login_sid_t=f39c57f474a4fbffeeac8b0d727c7310; YF-Ugrow-G0=169004153682ef91866609488943c77f; YF-V5-G0=cd5d86283b86b0d506628aedd6f8896e; WBStorage=7754ff192036c629|undefined; _s_tentry=-; YF-Page-G0=074bd03ae4e08433ef66c71c2777fd84; Apache=1025338456965.9829.1478277156276; SINAGLOBAL=1025338456965.9829.1478277156276; ULV=1478277156293:1:1:1:1025338456965.9829.1478277156276:; SUB=_2AkMvQDcef8NhqwJRmP4Uzm7mbYxwzA_EieLBAH7sJRMxHRl-yj9jqmwNtRBn0SIxPIgzk6P4Umq_twX_A70bVg..; SUBP=0033WrSXqPxfM72-Ws9jqgMF55529P9D9W5J2ZDKK_Q-h8ni.aX3E1Ci");

hget.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36");

//设置连接超时,传递响应超时

hClient.getParams().

setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000)

.setParameter(CoreConnectionPNames.SO_TIMEOUT, 10000)

.setParameter(ConnRouteParams.DEFAULT_PROXY, new HttpHost("121.31.71.63", 80));

//发送请求

HttpResponse response = hClient.execute(hget);

//获取网页内容

String content = EntityUtils.toString(response.getEntity(), "utf-8");

System.out.println(content);

}

1.2 Jsoup简介

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

通常在写爬虫程序时,httpClient集合Jsoup共同使用即可实现完美的爬虫系统。

httpClient负责模拟浏览器发送请求,Jsoup负责解析httpClient请求返回的HTML页面,解析获取需要的数据

1.2.1 Jsoup获取网页流程

1. 从一个 URL,文件或字符串中解析 HTML;

2. 使用 DOM 或 CSS 选择器来查找、取出数据;

3. 可操作 HTML 元素、属性、文本;

1.2.2 Jsoup获取网页代码

//使用jsoup加载远程连接数据

@Test

public void myJsouptest() throws Exception{

String userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36";

//准备cookie信息

Map maps = new HashMap();

maps.put("TC-Ugrow-G0", "968b70b7bcdc28ac97c8130dd353b55e");

maps.put("SUB", "2AkMvfeeDf8NhqwJRmP0dzGvhZY5yywvEieLBAH7sJRMxHRl-yT9jqmAHtRAgR4BQZgBIE-Xz-jsqjVftcUdtrA..");

maps.put("SUBP", "0033WrSXqPxfM72-Ws9jqgMF55529P9D9WhBu3bohh6dYkXbY_GUs5d8");

//获取网页dom对象

Document doc = Jsoup.connect("http://www.itcast.cn/")

.userAgent(userAgent)

.cookies(maps).get();

//获取文档标签

String title = doc.title();

System.out.println(title);

//获取网页元素

Elements elements = doc.select("div.qrcode-text");

System.out.println(elements.text());

}

2. 综合应用

3. 爬虫在电商网站应用

java 爬虫框架nutch_网络爬虫(2)-- Java爬虫框架相关推荐

  1. 重庆大学java考试_重庆大学网络教育学院 《Java程序设计》形考一答案

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 重庆大学网络教育学院 <Java程序设计>形考一答案 786971758 一.单项选择题 (共 30 题.共 60 分)1. 给定程序如下 p ...

  2. java毕业设计——基于java+Jsoup+HttpClient的网络爬虫技术的网络新闻分析系统设计与实现(毕业论文+程序源码)——网络新闻分析系统

    基于java+Jsoup+HttpClient的网络爬虫技术的网络新闻分析系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Jsoup+HttpClient的网络爬虫技术的网络 ...

  3. java爬虫学习_java网络爬虫基础学习(一)

    刚开始接触java爬虫,在这里是搜索网上做一些理论知识的总结 主要参考文章:gitchat 的java 网络爬虫基础入门,好像要付费,也不贵,感觉内容对新手很友好. 一.爬虫介绍 网络爬虫是一个自动提 ...

  4. java 网络爬虫 正则表达式_【干货】Java网络爬虫基础知识

    原标题:[干货]Java网络爬虫基础知识 引言 Java 网络爬虫具有很好的扩展性可伸缩性,其是目前搜索引擎开发的重要组成部分.例如,著名的网络爬虫工具 Nutch 便是采用 Java 开发,该工具以 ...

  5. iOS—网络实用技术OC篇网络爬虫-使用java语言抓取网络数据

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

  6. dht java_一个java版本的dht网络爬虫,伪装dht节点获取hashinfo

    dht-spider 一个java版本的dht网络爬虫,伪装dht节点获取hashinfo 导入idea 在入口类DhtNetworkApplication 的main方法下 修改udp端口 直接运行 ...

  7. java爬虫入门_Java 网络爬虫新手入门详解

    这是 Java 网络爬虫系列文章的第一篇,如果你还不知道 Java 网络爬虫系列文章,请参看Java 网络爬虫基础知识入门解析.第一篇是关于 Java 网络爬虫入门内容,在该篇中我们以采集虎扑列表新闻 ...

  8. Java教程之使用Jsoup实现简单的爬虫技术

    1.Jsoup简述 ​ Java中支持的爬虫框架有很多,比如WebMagic.Spider.Jsoup等.今天我们使用Jsoup来实现一个简单的爬虫程序. ​ Jsoup拥有十分方便的api来处理ht ...

  9. 精通python网络爬虫-精通Python网络爬虫:核心技术、框架与项目实战

    -- 目录 -- 前言 第一篇 理论基础篇 第1章 什么是网络爬虫 1.1 初识网络爬虫 1.2 为什么要学网络爬虫 1.3 网络爬虫的组成 1.4 网络爬虫的类型 1.5 爬虫扩展--聚焦爬虫 1. ...

最新文章

  1. CUDA 7流简化并发
  2. Azure AI的又一里程碑,Neural TTS新模型呈现真人般情感饱满的AI语音
  3. python椭圆面积_利用matplotlib实现2个椭圆的重叠区域
  4. typescript 中 let和var的区别
  5. java占位符填充_实现java中的占位符
  6. python中的参数值无法传递_python中关于函数参数值传递的问题
  7. 算法系列之赫夫曼编码实战一【数据压缩、数据解压】
  8. 如何不让FCKEditor自动添加P标签
  9. java中的printnb_javaI/O系统笔记
  10. 随想录(在实践中学习kernel代码)
  11. 博客目录 Blog directory
  12. opencv3中camshift详解(二)camshift原理介绍
  13. Onvif学习笔记(1)ONVIF Test Tool 的使用
  14. 彻底研究jQuery教程
  15. 物联卡套餐该如何选择
  16. 3D中点线面之间的几何关系
  17. python re正则匹配_python—RE正则表达式
  18. 英语学习之沪江整理 20141101
  19. 菲尔博士给我们提供提升交际气场的36招
  20. pta 构造哈夫曼树-有序输入 优先队列做法

热门文章

  1. 圣戈班发布全新本地化生物工艺袋产品
  2. 在archlinux中安装virtualbox
  3. 虚拟机安装Ubuntu16.04.6
  4. Ubuntu下安装使用Xfce4
  5. 百度云网速慢?普通VIP也限速?用户激励措施太套路?Pandownload被举报?这些统统没关系,我们自己搭建一个私人云盘服务器
  6. access 2003 取消数据库密码
  7. linux c++编程教程,Linux下的C++编程入门教程.ppt
  8. 腾讯通服务器文件目录,《腾讯RTX快速部署指南》
  9. 有没有html代码听力的软件吗,有哪些英语听力训练的软件?
  10. MySql到MySqli