博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java jsoup多线程爬虫(爬豆瓣图书封面)
阅读量:6676 次
发布时间:2019-06-25

本文共 2689 字,大约阅读时间需要 8 分钟。

Java爬虫,就先爬个好爬的豆瓣读书的封面。

Java jsoup多线程爬虫(爬豆瓣图书封面)

利用线程池多线程爬,biubiubiu,速度超快。

下载到指定的文件夹中。

 

App.java:

package com.newer.spider;import java.io.IOException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import org.jsoup.Jsoup;import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class App { public static void main(String[] args) { // 确定目标地址 URL 统一资源定位符 String url="https://book.douban.com/"; // 2 解析 html : https://jsoup.org try { // Document doc = Jsoup.connect(url).get(); // System.out.println(doc.title()); // System.out.println(doc.html()); //从 Doc 的树形结构中查找 img 标签 //.class 选择器 Elements els = doc.select(".cover img"); System.out.println(els.size()); // 创建一个线程池 //.class 选择器 ExecutorService pool = Executors.newCachedThreadPool(); pool = Executors.newFixedThreadPool(9); // pool = Executors.newSingleThreadExecutor(); for(Element e : els) { //  String src = e.attr("src"); System.out.println(src); // 下载每张图片 pool.execute(new DownloadTask(src)); } //释放资源  pool.shutdown(); } catch (IOException e) { // TODO Auto-generated catch block  e.printStackTrace(); } } }
package com.newer.spider;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException; import java.net.URL; import javax.net.ssl.HttpsURLConnection; /** * 负责下载图片的任务,可以由线程执行 (Runnable) * * @author zmz * */ public class DownloadTask implements Runnable { //图片的路径  String imagePath; /** * * @param src * 图片的位置和路径 */ public DownloadTask(String src) { imagePath = src; } @Override public void run() { //建立一个HTTP连接,使用输入流获得数据,使用输出流写入磁盘 HttpURLConnection conn = null; InputStream in = null; FileOutputStream out = null; try { conn = (HttpURLConnection) new URL(imagePath).openConnection(); //读取数据 in = conn.getInputStream(); String uu = "G:\\Newer_Project\\Spider\\img\\"; //获得图片的名字 int index = imagePath.lastIndexOf('/'); String file = imagePath.substring(index + 1); file = uu + file; //创建输出流,写入 out = new FileOutputStream(file); byte[] buf = new byte[1024 + 16]; int size; while(-1 != (size = in.read(buf))) { out.write(buf, 0, size); } //下载完成 String name = Thread.currentThread().getName(); System.out.println(name + "下载" + imagePath); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { //不论是否发生异常都会执行的 if(out != null) { try { out.close(); } catch (IOException e) { // TODO Auto-generated catch block  e.printStackTrace(); } } if(conn != null) { conn.disconnect(); } } } }

 

后续是不是可以翻页爬的,因为这个只是爬当前页面的,豆瓣读书网的书还有很多页,我们爬完这一页的,继续爬下一页?

转载于:https://www.cnblogs.com/zhangmingzhao/p/7580282.html

你可能感兴趣的文章
SQL Server 2012笔记分享-17:理解并设置文件表(FileTable)
查看>>
MongoDB运行状态、性能监控与分析
查看>>
Exchange 2016共享邮箱不保存已发送邮件的问题
查看>>
[C#基础知识系列]全面解析C#中静态与非静态
查看>>
SQL Server 2012笔记分享-40:自动维护索引
查看>>
C/C++各种系统开发环境搭建
查看>>
dwz navtab 限制打开数量实例
查看>>
Linq技术四:动态Linq技术 -- Linq.Expressions
查看>>
ARC __bridge modifiers demystified
查看>>
[转]HTML字符实体(Character Entities),转义字符串(Escape Sequence)
查看>>
【hoj】2651 pie 二分查找
查看>>
真正的干货是什么?
查看>>
LR函数基础(二)
查看>>
SharedPreference.Editor的apply和commit方法异同
查看>>
【Xamarin开发 Android 系列 6】 Android 结构基础(上)
查看>>
学习一样新东西行而有效的方法 学习捷径 一项由10个步骤组成的学习方法
查看>>
Spotlight实时监控Windows Server 2008
查看>>
linux shell “(())” 双括号运算符使用
查看>>
http://code.662p.com/view/5141.html
查看>>
C C++ OC指针常量和常量指针区别
查看>>