上一篇:Java网络爬虫实操(7)

大家好,本篇文章介绍一下NetDiscovery爬虫框架里的downloader对象

1) 前言

面向对象设计仍然是目前编程的核心思想,从下面截图可以了解爬虫框架的主要对象:

程序在本地组织好一个request后,交给downloader从网络上抓取数据到本地,然后由parser处理本地的这些数据,最终生成可用的信息。

2) downloader介绍

downloader我们也称为下载器,主要功能就是访问网络并成功抓回我们要的数据:例如html网页、json/xml数据、二进制流(图片、office文档等) 目前NetDiscovery支持的downloader实现有:

面向接口编程是这个框架的重要设计思想之一。

以下介绍部分downloader代码,这些代码的共同点是实现了Downloader接口。

作为程序开发者,你也可以实现接口com.cv4j.netdiscovery.core.downloader.Downloader,创建自己的下载器类。

  • UrlConnectionDownloader 这个用的是jdk自带的包,java.io、java.net
//1、构建一个URL对象
url = new URL(request.getUrl());
//2、获取一个HttpURLConnection对象
conn = url.openConnection();
//3、一堆设置
conn .setDoOutput(true);
conn .setDoInput(true);
conn .setRequestMethod("POST");
......
//4、访问网络服务
conn.connect();
//5、执行成功的话,获取结果
conn.getResponseCode();
conn.getInputStream();
复制代码
  • HttpClientDownloader 这个是用开源包apache httpclient实现的,代码就更加简洁优雅了。
//1、获取一个HttpManager对象(框架自己封装的)
HttpManager httpManager = HttpManager.get();
//2、然后把request扔进去,等结果就可以了.request也是框架封装的
httpManager.getResponse(request)
//3、等来结果后,进行处理@Overridepublic Response apply(CloseableHttpResponse closeableHttpResponse) throws Exception {String charset = null;if (Preconditions.isNotBlank(request.getCharset())) {charset = request.getCharset();  //针对一些还是GB2312编码的网页} else {charset = "UTF-8";}String html = EntityUtils.toString(closeableHttpResponse.getEntity(), charset);Response response = new Response();response.setContent(html.getBytes());response.setStatusCode(closeableHttpResponse.getStatusLine().getStatusCode());if (closeableHttpResponse.containsHeader("Content-Type")) {response.setContentType(closeableHttpResponse.getFirstHeader("Content-Type").getValue());}return response;}
复制代码
  • VertxDownloader等类大家有需要都可以去了解一下。

3) 总结

总之,爬虫程序本质上是一个网络程序,网络程序的核心模块离不开对网络数据的处理。建议学习爬虫的伙伴们,要看源代码的话,可以先从框架中的downloader相关代码开始了解。相信一定会有收获的。

下一篇:Java网络爬虫实操(9)

Java网络爬虫实操(8)相关推荐

  1. Java网络爬虫实操(5)

    上一篇:Java网络爬虫实操(4) 大家好,前几篇文章介绍的URL都是返回HTML内容的,然后再从HTML字符串里解析出我们想要的数据. 但是,随着前端编程技术的发展,至少十多年前开始ajax.jso ...

  2. Java网络爬虫实操(3)

    上一篇:Java网络爬虫实操(2) 本篇文章主要介绍NetDiscovery框架中pipeline模式的一些实际使用方法. 1) 什么是pipeline pipeline是一种常见的算法模式,针对不断 ...

  3. java网络爬虫实验报告,Java网络爬虫实操(8)

    大家好,本篇文章介绍一下NetDiscovery爬虫框架里的downloader对象 1) 前言 面向对象设计仍然是目前编程的核心思想,从下面截图可以了解爬虫框架的主要对象: 程序在本地组织好一个re ...

  4. java spider爬虫_Java网络爬虫实操(2)

    本篇文章继续介绍爬虫框架NetDiscovery的使用:如何发重复请求.如何用爬虫容器引擎驱动爬虫程序 1 )重复请求的场景举例 从2017年下半年开始,比特币.数字货币.虚拟币.区块链技术.去中心化 ...

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

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

  6. 第三十六期:学 Java 网络爬虫,需要哪些基础知识?

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

  7. Java网络爬虫该如何学习

    文章目录 引言 怎么入门网络爬虫 课程特色 学完本课程能收获什么 引言 互联网以及移动技术的飞速发展,使得全球数据量呈现前所未有的爆炸式增长态势.例如,用户在互联网上的搜索数据.交易数据.评论数据.社 ...

  8. java网络爬虫,乱码问题终于完美解决

    java网络爬虫,乱码问题终于完美解决 参考文章: (1)java网络爬虫,乱码问题终于完美解决 (2)https://www.cnblogs.com/-LilyBlog-/p/7593841.htm ...

  9. 在不同领域,大家用爬虫怎么盈利的-Java网络爬虫系统性学习与实战系列(4)

    在不同领域,大家用爬虫怎么盈利的-Java网络爬虫系统性学习与实战系列(4) 文章目录 概述 出行抢票软件 微博上的僵尸粉 电商比价/返利平台 社区抓取数据和内容 联系方式 系列文章地址: Java网 ...

最新文章

  1. 问题集录--正则表达式
  2. 4 Convex optimization problems
  3. 双系统windows10扩容ubuntu16.04
  4. TensorFlow 教程 --进阶指南--3.10共享变量
  5. 网页游戏为什么容易赚钱?(From:07073)
  6. APACHE ACTIVEMQ安装
  7. 0-1背包问题——回溯法求解
  8. 2016 最好的Bootstrap 管理模板
  9. linux pthread头文件,pthread t 头文件_uint8 t 头文件_pthread t 头文件
  10. 微信服务号认证收费 :一场激进的自卫战
  11. java 正则表达式 去掉 文章头部和尾部的空格(全角,半角)、制表符、换页符
  12. 计算机毕业设计Node.js+uniapp安卓劳务派遣APP(源码+程序+lw+远程调试)
  13. 计算机信息系统打印输出的涉密文件,计算机信息系统打印输出的涉密文件,应当按相应的()文件进行管理。...
  14. fasterRCNN系列
  15. java输入两个整数_求平均值._用C语言编写:完成从键盘输入两个整数a和b,求平均值ave,并输出平均值...
  16. 职业迷茫思路乱?是因为脑子不好?
  17. 使用 QTLtools 进行 PCA 分析
  18. 什么是核心交换机?如何选择核心交换机?
  19. CDN和CDN加速有什么关联
  20. 2020年11月网络规划设计师上午试题

热门文章

  1. kotlin读取html,kotlin 使用skrape {it}从html获取数据 - 糯米PHP
  2. php熊掌号怎么设置json-ld,dedecms织梦系统怎么对接百度熊掌号并添加JSON_LD数据
  3. 黑马程序员_java基础笔记(15)...银行业务调度系统_编码思路及代码
  4. (转)java内部类详解
  5. PING检查网络是否畅通
  6. 最小生成树练习1(克鲁斯卡尔算法Kruskal)
  7. native的Socket向Android的LocalSocketServer发送汉字乱码的问题
  8. hdu 1754/zstu 3121 I Hate It(线段树)
  9. access查询出生日期格式转换_从身份证中提取出生日期的3个方法和计算年龄和星座的方法...
  10. 链式栈的实现(头文件及源程序)