2019独角兽企业重金招聘Python工程师标准>>>

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发送请求对象,HttpgetHttpGet 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加载远程连接数据@Testpublic 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<String, String> maps = new HashMap<String, String>();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. 爬虫在电商网站应用

转载于:https://my.oschina.net/bigdataer/blog/888493

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

  1. python爬虫与java爬虫的区别_java爬虫(一)主流爬虫框架的基本介绍

    (1).Scrapy: Scrapy,Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测 ...

  2. 什么是爬虫,常见的java爬虫框架有哪些?-蛙课网

    随着互联网的发展,编程程序语言也开始被越来越多的人所掌握,与此同时,java语言是使用范围最广的编程语言.今天我们一起了解一下什么是爬虫,java爬虫框架有哪些. 网络爬虫(又称为网页蜘蛛,网络机器人 ...

  3. java可以进行爬虫吗,java可以写爬虫吗

    java可以写爬虫吗?java可以写爬虫吗?希望提供一下编写思路 codeblocks能不能写我不知道,但不仅仅只有java可以写爬虫. 用java 编写爬虫是不是很简单 用java编写爬虫, 有丰富 ...

  4. java爬虫系列(五)——今日头条文章爬虫实战

    文章目录 项目源码 爬虫目标 爬虫设计思路 爬取方式 动态解析网页方式爬取 解析接口方式爬取 解析思路 破解入口 接口对比 破解加密参数 参数生成方式 解析js 分析接口返回值 解析原文地址 java ...

  5. java爬虫系列(三)——漫画网站爬取实战

    项目地址 数据库设计 ORM框架 代理浏览器 实战目标 代码解读 com.ouyang.crawlers.Manhua start() chapterBean() contentBean() 实测 启 ...

  6. java爬虫系列(二)——爬取动态网页

    准备工作 项目地址 网页解析工具地址 启动网页解析器 根据系统选择所需文件 指定端口号启动工具 项目配置 seimi.properties SeimiAgentDemo.java 分析原网页代码 Bo ...

  7. java爬虫系列(四)——动态网页爬虫升级版

    项目地址 项目介绍 框架 结构 快速启动 修改配置文件 WebDriverPool.java App.java ComicDriver.java ComicContentService.java co ...

  8. 爬虫与反爬虫技术分析

    科普: 什么是爬虫: 百度百科:网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还 ...

  9. Java爬虫框架调研

    Python中大的爬虫框架有scrapy(风格类似django),pyspider(国产python爬虫框架). 除了Python,Java中也有许多爬虫框架. nutch apache下的开源爬虫程 ...

  10. python网络爬虫、Java 网络爬虫,哪个更好?

    说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少.有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬 ...

最新文章

  1. JSPServlet路径问题
  2. Java数据结构与算法(一) 数组
  3. c swap方法在哪个库里面_在编程竞赛中高效地编写C/C ++代码
  4. SQL Server 2008编写脚本时智能提示功能丢失的处理
  5. linux trap命令
  6. 2018年创业最火热点的是什么?看到这个你可能就知道哪方面发展最热了
  7. python将索引升序_程序在Python中按升序删除元素后获取列表的索引
  8. linux系统自签发免费ssl证书,为nginx生成自签名ssl证书
  9. 如何防止头文件被重复包含或引用?
  10. PXE 网络化安装linux系统
  11. javascript控制开始日期,和结束日期在同一个月
  12. 【动态规划】程序员面试金典——11.7叠罗汉I
  13. 中建信息的新分销主义
  14. php中怎么引用js变量_理解下 Go 中的引用是怎么回事
  15. python3 open打开文件_Python3基础 file open 打开txt文件并打印出全文
  16. mysql如何实现cas机制_CAS机制详解
  17. “大数据分析”和“数据分析”的区别与联系
  18. docker: 打包h5项目的镜像
  19. CPU的分身术:千手观音与齐天大圣
  20. 几行代码实现用Python输出表情包

热门文章

  1. java自定义类加载器
  2. vue 自定义封装组件 使用 model 选项
  3. SVG动画.animateTransform
  4. 使用日志记录功能查看PHP扩展的执行过程
  5. Storm具体的解释(二)、成为第一Storm申请书
  6. scrollBarStyle- listview滑动条调整
  7. MinGW 和 MSVC 下,使用 FILE 类型的一个奇怪的问题
  8. 批量(导入导出)迁移AD中的用户信息和密码到新环境中,同时保持用户在MOSS中的权限【addusers,ldifde,copypwd,UserInfo,tp_SystemID】...
  9. php饼图只有一个小方块_如何做出PHP数据饼图
  10. 神经网络调参---权重对分类性能的影响