java 爬虫框架nutch_网络爬虫(2)-- Java爬虫框架
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爬虫框架相关推荐
- 重庆大学java考试_重庆大学网络教育学院 《Java程序设计》形考一答案
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 重庆大学网络教育学院 <Java程序设计>形考一答案 786971758 一.单项选择题 (共 30 题.共 60 分)1. 给定程序如下 p ...
- java毕业设计——基于java+Jsoup+HttpClient的网络爬虫技术的网络新闻分析系统设计与实现(毕业论文+程序源码)——网络新闻分析系统
基于java+Jsoup+HttpClient的网络爬虫技术的网络新闻分析系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Jsoup+HttpClient的网络爬虫技术的网络 ...
- java爬虫学习_java网络爬虫基础学习(一)
刚开始接触java爬虫,在这里是搜索网上做一些理论知识的总结 主要参考文章:gitchat 的java 网络爬虫基础入门,好像要付费,也不贵,感觉内容对新手很友好. 一.爬虫介绍 网络爬虫是一个自动提 ...
- java 网络爬虫 正则表达式_【干货】Java网络爬虫基础知识
原标题:[干货]Java网络爬虫基础知识 引言 Java 网络爬虫具有很好的扩展性可伸缩性,其是目前搜索引擎开发的重要组成部分.例如,著名的网络爬虫工具 Nutch 便是采用 Java 开发,该工具以 ...
- iOS—网络实用技术OC篇网络爬虫-使用java语言抓取网络数据
网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...
- dht java_一个java版本的dht网络爬虫,伪装dht节点获取hashinfo
dht-spider 一个java版本的dht网络爬虫,伪装dht节点获取hashinfo 导入idea 在入口类DhtNetworkApplication 的main方法下 修改udp端口 直接运行 ...
- java爬虫入门_Java 网络爬虫新手入门详解
这是 Java 网络爬虫系列文章的第一篇,如果你还不知道 Java 网络爬虫系列文章,请参看Java 网络爬虫基础知识入门解析.第一篇是关于 Java 网络爬虫入门内容,在该篇中我们以采集虎扑列表新闻 ...
- Java教程之使用Jsoup实现简单的爬虫技术
1.Jsoup简述 Java中支持的爬虫框架有很多,比如WebMagic.Spider.Jsoup等.今天我们使用Jsoup来实现一个简单的爬虫程序. Jsoup拥有十分方便的api来处理ht ...
- 精通python网络爬虫-精通Python网络爬虫:核心技术、框架与项目实战
-- 目录 -- 前言 第一篇 理论基础篇 第1章 什么是网络爬虫 1.1 初识网络爬虫 1.2 为什么要学网络爬虫 1.3 网络爬虫的组成 1.4 网络爬虫的类型 1.5 爬虫扩展--聚焦爬虫 1. ...
最新文章
- CUDA 7流简化并发
- Azure AI的又一里程碑,Neural TTS新模型呈现真人般情感饱满的AI语音
- python椭圆面积_利用matplotlib实现2个椭圆的重叠区域
- typescript 中 let和var的区别
- java占位符填充_实现java中的占位符
- python中的参数值无法传递_python中关于函数参数值传递的问题
- 算法系列之赫夫曼编码实战一【数据压缩、数据解压】
- 如何不让FCKEditor自动添加P标签
- java中的printnb_javaI/O系统笔记
- 随想录(在实践中学习kernel代码)
- 博客目录 Blog directory
- opencv3中camshift详解(二)camshift原理介绍
- Onvif学习笔记(1)ONVIF Test Tool 的使用
- 彻底研究jQuery教程
- 物联卡套餐该如何选择
- 3D中点线面之间的几何关系
- python re正则匹配_python—RE正则表达式
- 英语学习之沪江整理 20141101
- 菲尔博士给我们提供提升交际气场的36招
- pta 构造哈夫曼树-有序输入 优先队列做法
热门文章
- 圣戈班发布全新本地化生物工艺袋产品
- 在archlinux中安装virtualbox
- 虚拟机安装Ubuntu16.04.6
- Ubuntu下安装使用Xfce4
- 百度云网速慢?普通VIP也限速?用户激励措施太套路?Pandownload被举报?这些统统没关系,我们自己搭建一个私人云盘服务器
- access 2003 取消数据库密码
- linux c++编程教程,Linux下的C++编程入门教程.ppt
- 腾讯通服务器文件目录,《腾讯RTX快速部署指南》
- 有没有html代码听力的软件吗,有哪些英语听力训练的软件?
- MySql到MySqli