作为一位Java爬虫的初学者,分享一下自己的心得。
所用到的jar包

org.codehaus.jettison.jar

jsoup-1.7.3.jar

个人认为爬虫的实现机制:
获取Docume对象—>获取节点—>输出或者持久化

获取页面的图片地址

获取Docume对象—>获取Img元素—>输出地址

  1. package com.cn.basic;
  2.  
  3. import java.io.IOException;
  4. import org.jsoup.Jsoup;
  5. import org.jsoup.nodes.Document;
  6. import org.jsoup.nodes.Element;
  7. import org.jsoup.select.Elements;
  8.  
  9. public class ImageDemo1 {
  10.  
  11. public static void Get_Url(String htmlUrl, String path) {
  12.  
  13. try {
  14. Document doc = Jsoup.connect(htmlUrl).get();
  15.  
  16. Element body = doc.body();
  17. Elements elements = body.select("img");
  18.  
  19. String src = "";
  20. for (Element element : elements) {
  21.  
  22. src = element.attr("src");
  23.  
  24. System.out.println(path + src);
  25.  
  26. }
  27.  
  28. System.out.println("elements-size: " + elements.size());
  29.  
  30. } catch (IOException e) {
  31. e.printStackTrace();
  32. }
  33.  
  34. }
  35.  
  36. public static void main(String[] args) {
  37.  
  38. String url = "http://pic.netbian.com/4kkatongdongman/index_2.html";
  39. String path = "http://pic.netbian.com";
  40. Get_Url(url, path);
  41.  
  42. }
  43.  
  44. }

将图片写入本地

获取Docume对象—>获取Img元素—>将图片保存本地

  1. package com.cn.basic;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.File;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.net.HttpURLConnection;
  9. import java.net.URL;
  10. import java.util.Date;
  11.  
  12. import org.jsoup.Jsoup;
  13. import org.jsoup.nodes.Document;
  14. import org.jsoup.nodes.Element;
  15. import org.jsoup.select.Elements;
  16.  
  17. public class ImageDemo2 {
  18.  
  19. public static void saveImage(String htmlUrl, String path) {
  20.  
  21. try {
  22. Document doc = Jsoup.connect(htmlUrl).get();
  23. Element body = doc.body();
  24. Elements elements = body.select("img");
  25.  
  26. String outputFilePath="E:/pythonTest/javaPython/imgs/";
  27. String src = "";
  28.  
  29. HttpURLConnection conn = null;
  30. InputStream inStream = null;
  31. byte[] data = null;
  32. String filePath = null;
  33. FileOutputStream outStream = null;
  34.  
  35. Long startTime=new Date().getTime();
  36.  
  37. for (Element element : elements) {
  38.  
  39. src = element.attr("src");
  40.  
  41. System.out.println(path + src);
  42. // new一个URL对象
  43.  
  44. if (!src.contains(".jpg")) {
  45. continue;
  46. }
  47.  
  48. URL url = new URL(path + src);
  49. // 打开链接
  50. conn = (HttpURLConnection) url.openConnection();
  51. // 设置请求方式为"GET"
  52. conn.setRequestMethod("GET");
  53. // 超时响应时间为5秒
  54. conn.setConnectTimeout(5 * 1000);
  55. // 通过输入流获取图片数据
  56. inStream = conn.getInputStream();
  57. // 得到图片的二进制数据,以二进制封装得到数据,具有通用性
  58. data = readInputStream(inStream);
  59. // new一个文件对象用来保存图片,默认保存当前工程根目录
  60. filePath = outputFilePath + System.currentTimeMillis() + ".jpg";
  61. // 创建输出流
  62. outStream = new FileOutputStream(new File(filePath));
  63. // 写入数据
  64. outStream.write(data);
  65. // 关闭输出流
  66. outStream.close();
  67.  
  68. }
  69. System.out.println(elements.size());
  70. System.out.println("读写速度:"+(new Date().getTime()-startTime)+"毫秒");
  71.  
  72. } catch (IOException e) {
  73. e.printStackTrace();
  74. } catch (Exception e) {
  75. e.printStackTrace();
  76. }
  77.  
  78. }
  79.  
  80. public static byte[] readInputStream(InputStream inStream) throws Exception {
  81. ByteArrayOutputStream outStream = new ByteArrayOutputStream();
  82. // 创建一个Buffer字符串
  83. byte[] buffer = new byte[1024];
  84. // 每次读取的字符串长度,如果为-1,代表全部读取完毕
  85. int len = 0;
  86. // 使用一个输入流从buffer里把数据读取出来
  87. while ((len = inStream.read(buffer)) != -1) {
  88. // 用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
  89. outStream.write(buffer, 0, len);
  90. }
  91. // 关闭输入流
  92. inStream.close();
  93. // 把outStream里的数据写入内存
  94. return outStream.toByteArray();
  95. }
  96.  
  97. public static void main(String[] args) {
  98. String url = "http://pic.netbian.com/4kkatongdongman/index_2.html";
  99. String path = "http://pic.netbian.com";
  100. saveImage(url, path);
  101. }
  102.  
  103. }

Java爬虫的更多相关文章

  1. webmagic的设计机制及原理-如何开发一个Java爬虫

    之前就有网友在博客里留言,觉得webmagic的实现比较有意思,想要借此研究一下爬虫.最近终于集中精力,花了三天时间,终于写完了这篇文章.之前垂直爬虫写了一年多,webmagic框架写了一个多月,这方 ...

  2. JAVA爬虫挖取CSDN博客文章

    开门见山,看看这个教程的主要任务,就去csdn博客,挖取技术文章,我以<第一行代码–安卓>的作者为例,将他在csdn发表的额博客信息都挖取出来.因为郭神是我在大学期间比较崇拜的对象之一.他 ...

  3. 爬虫6:多页面增量Java爬虫-sina主页

    之前写过很多单页面python爬虫,感觉python还是很好用的,这里用java总结一个多页面的爬虫,迭代爬取种子页面的所有链接的页面,全部保存在tmp路径下. 1 序言 实现这个爬虫需要两个数据结构 ...

  4. 推荐几个优秀的java爬虫项目

    java爬虫项目   大型的: Nutch apache/nutch · GitHub 适合做搜索引擎,分布式爬虫是其中一个功能. Heritrix internetarchive/heritrix3 ...

  5. Java爬虫搜索原理实现

    permike 原文 Java爬虫搜索原理实现 没事做,又研究了一下爬虫搜索,两三天时间总算是把原理闹的差不多了,基本实现了爬虫搜索的原理,本次实现还是俩程序,分别是按广度优先和深度优先完成的,广度优 ...

  6. JAVA爬虫 WebCollector

    JAVA爬虫 WebCollector 爬虫简介: WebCollector是一个无须配置.便于二次开发的JAVA爬虫框架(内核),它提供精简的的API,只需少量代码即可实现一个功能强大的爬虫. 爬虫 ...

  7. 爬虫入门 手写一个Java爬虫

    本文内容 涞源于  罗刚 老师的 书籍 << 自己动手写网络爬虫一书 >> ; 本文将介绍 1: 网络爬虫的是做什么的?  2: 手动写一个简单的网络爬虫; 1: 网络爬虫是做 ...

  8. JAVA爬虫实践(实践三:爬虫框架webMagic和csdnBlog爬虫)

    WebMagic WebMagic是一个简单灵活的Java爬虫框架.基于WebMagic,你可以快速开发出一个高效.易维护的爬虫. 采用HttpClient可以实现定向的爬虫,也可以自己编写算法逻辑来 ...

  9. MinerUtil.java 爬虫工具类

    MinerUtil.java 爬虫工具类 package com.iteye.injavawetrust.miner; import java.io.File; import java.io.File ...

随机推荐

  1. MVC 常用扩展点:过滤器、模型绑定等

    MVC 常用扩展点:过滤器.模型绑定等 一.过滤器(Filter) ASP.NET MVC中的每一个请求,都会分配给对应Controller(以下简称"控制器")下的特定Actio ...

  2. 【Socket编程】Java通信是这样炼成的

    简介 网络无处不在,移动互联时代也早已到来,单机版程序慢慢的已没有生命力,所有的程序都要能够访问网络,比如 QQ 网络聊天程序.迅雷下载程序等,这些程序都要同网络打交道,本次将与各位小伙伴们分享的就是 ...

  3. js Web存储方式

    JSON是数据交互中最常用的一种数据格式. 由于各种语言的语法都不同,在传递数据时,可以将自己语言中的数组.对象等转换为JSON字符串> 传递之后,可以讲JSON字符串,在解析为JSON对象. ...

  4. 将home多余的空间分配到"/"分区下

    一.操作过程 1.df -h 查看分区大小情况; [root@localhost /]# df -h Filesystem            Size  Used Avail Use% Mount ...

  5. 201521123024《Java程序设计》第8周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 实验总结 注意conve ...

  6. 201521123038 《Java程序设计》 第七周学习总结

    201521123038 <Java程序设计> 第七周学习总结 1. 本周学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 ...

  7. 201521123023《Java程序设计》第13周学习总结

    1. 本周学习总结 (1)网络中为了进行数据交换(通信)而建立的规则.标准或约定(=语义+语法+规则)称之为协议(常用http/ftp) (2)大致熟悉了TCP协议,但是UDP怎么辣么蓝,好理解却用不 ...

  8. java从控制台接收一个数字

    //时间:2017/7/22//作者:江骆//功能:从控制台接收一个数import java.io.*;  //引入一个IO流的包public class helloworld1{    public ...

  9. Jacoco远程统计tomcat服务(Windows系统)的代码覆盖率

    Jacoco远程统计tomcat服务(Windows系统)的代码覆盖率 2017-09-21 目录 1 Jacoco的安装和设置  1.1 什么是Jacoco?  1.2 Jacoco安装  1.3 ...

  10. 双击打开Jar文件

    最近发现个诡异的问题,java环境变量明明配好了.但是双击xx.jar文件,就是不能直接打开运行. 先想到了第一个解决办法: 运行cmd.exe,cd到jar目录,执行 javaw -jar xxx. ...