jsoup简介

jsoup is a Java library for working with real-world HTML. It provides a very convenient API for extracting and manipulating data, using the best of DOM, CSS, and jquery-like methods.

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

官网

jsoup官网

代码

  1. import org.jsoup.nodes.Element;
  2. import org.jsoup.select.Elements;
  3. import java.io.*;
  4. import java.net.MalformedURLException;
  5. import java.net.URL;
  6. import java.net.URLConnection;
  7. import java.net.URLEncoder;
  8. public class FetchImgsUtil {
  9. /**
  10. * 下载图片到指定目录
  11. *
  12. * @param filePath 文件路径
  13. * @param imgUrl 图片URL
  14. */
  15. public static void downImages(String filePath, String imgUrl) {
  16. // 若指定文件夹没有,则先创建
  17. File dir = new File(filePath);
  18. if (!dir.exists()) {
  19. dir.mkdirs();
  20. }
  21. // 截取图片文件名
  22. String fileName = imgUrl.substring(imgUrl.lastIndexOf('/') + 1, imgUrl.length());
  23. try {
  24. // 文件名里面可能有中文或者空格,所以这里要进行处理。但空格又会被URLEncoder转义为加号
  25. String urlTail = URLEncoder.encode(fileName, "UTF-8");
  26. // 因此要将加号转化为UTF-8格式的%20
  27. imgUrl = imgUrl.substring(0, imgUrl.lastIndexOf('/') + 1) + urlTail.replaceAll("\\+", "\\%20");
  28. } catch (UnsupportedEncodingException e) {
  29. e.printStackTrace();
  30. }
  31. // 写出的路径
  32. File file = new File(filePath + File.separator + fileName);
  33. try {
  34. // 获取图片URL
  35. URL url = new URL(imgUrl);
  36. // 获得连接
  37. URLConnection connection = url.openConnection();
  38. // 设置10秒的相应时间
  39. connection.setConnectTimeout(10 * 1000);
  40. // 获得输入流
  41. InputStream in = connection.getInputStream();
  42. // 获得输出流
  43. BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
  44. // 构建缓冲区
  45. byte[] buf = new byte[1024];
  46. int size;
  47. // 写入到文件
  48. while (-1 != (size = in.read(buf))) {
  49. out.write(buf, 0, size);
  50. }
  51. out.close();
  52. in.close();
  53. } catch (MalformedURLException e) {
  54. e.printStackTrace();
  55. } catch (IOException e) {
  56. e.printStackTrace();
  57. }
  58. }
  59. public static void main(String[] args) {
  60. // 利用Jsoup获得连接
  61. Connection connect = Jsoup.connect("http://www.qq.com");
  62. try {
  63. // 得到Document对象
  64. Document document = connect.get();
  65. // 查找所有img标签
  66. Elements imgs = document.getElementsByTag("img");
  67. System.out.println("共检测到下列图片URL:");
  68. System.out.println("开始下载");
  69. // 遍历img标签并获得src的属性
  70. for (Element element : imgs) {
  71. //获取每个img标签URL "abs:"表示绝对路径
  72. String imgSrc = element.attr("abs:src");
  73. // 打印URL
  74. System.out.println(imgSrc);
  75. //下载图片到本地
  76. FetchImgsUtil.downImages("d:/img", imgSrc);
  77. }
  78. System.out.println("下载完成");
  79. } catch (IOException e) {
  80. e.printStackTrace();
  81. }
  82. }
  83. }

总结

刚开始的时候有的图片URL中文件名包含了中文、空格等,导致了异常如:java.io.IOException: Server returned HTTP response code: 500 for URL: http://images.csdn.net/20170301/程序员1703封面.jpg

可能是编码的影响,因此需要对图片文件名转换为UTF-8格式,并且要注意空格经过URLEncoder编码会变为加号,再对其转换为对应的%20

利用jsoup抓取网页图片的更多相关文章

  1. jsoup抓取网页+具体解说

    jsoup抓取网页+具体解说 Java 程序在解析 HTML 文档时,相信大家都接触过 htmlparser 这个开源项目.我以前在 IBM DW 上发表过两篇关于 htmlparser 的文章.各自 ...

  2. 利用Crowbar抓取网页异步加载的内容 [Python俱乐部]

    利用Crowbar抓取网页异步加载的内容 [Python俱乐部] 利用Crowbar抓取网页异步加载的内容 在做 Web 信息提取.数据挖掘的过程中,一个关键步骤就是网页源代码的获取.但是出于各种原因 ...

  3. Python3简单爬虫抓取网页图片

    现在网上有很多python2写的爬虫抓取网页图片的实例,但不适用新手(新手都使用python3环境,不兼容python2), 所以我用Python3的语法写了一个简单抓取网页图片的实例,希望能够帮助到 ...

  4. 抓取网页图片的脚本(javascript)

    抓取网页图片的脚本(javascript) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24172223 脚本内容 (没有换行) ...

  5. Jsoup抓取网页数据完成一个简易的Android新闻APP

    前言:作为一个篮球迷,每天必刷NBA新闻.用了那么多新闻APP,就想自己能不能也做个简易的新闻APP.于是便使用Jsoup抓取了虎扑NBA新闻的数据,完成了一个简易的新闻APP.虽然没什么技术含量,但 ...

  6. HttpClient+Jsoup 抓取网页信息(网易贵金属为例)

    废话不多说直接讲讲今天要做的事. 利用HttpClient和Jsoup技术抓取网页信息.HttpClient是支持HTTP协议的客户端编程工具包,并且它支持HTTP协议. jsoup 是一款基于 Ja ...

  7. C语言调用curl库抓取网页图片

    思路是先用curl抓取网页源码,然后以关键字寻找出图片网址.   #include <stdio.h> #include <stdlib.h> #include <str ...

  8. C语言调用curl库抓取网页图片(转)

    思路是先用curl抓取网页源码,然后以关键字寻找出图片网址.  范例: #include <stdio.h> #include <stdlib.h> #include < ...

  9. PHP抓取网页图片

    <?php set_time_limit(0);//抓取不受时间限制 if($_POST['Submit']=="开始抓取"){ $URL=$_POST['link']; g ...

随机推荐

  1. 种类并查集,Poj(1703)

    题目链接:http://poj.org/problem?id=1703 第一次做种类并查集,有的地方还不是很清楚,想了一上午,有点明白了,这里记录一下. 这里我参考的红黑联盟的题解. 关键:种类并查集 ...

  2. 如何不安装SQLite让程序可以正常使用

    System.Data.SQLite.dll和System.Data.SQLite.Linq.dll不必在GAC里面,关键在于Machine.config的DBProviderFactories没有正 ...

  3. 下载Xcode历史版本方法

    1.打开链接:https://developer.apple.com/download/more 进入页面 2.在搜索框输入Xcode,回车搜索.如图,找到各种版本Xcode 搜索Xcode 3.双击 ...

  4. update_TypeError

    TypeError: ( 'An update must have the same type as the original shared variable ( shared_var=W, shar ...

  5. C++ Boost库简介

    boost是一个准标准库,相当于STL的延续和扩充,它的设计理念和STL比较接近,都是利用泛型让复用达到最大化.不过对比STL,boost更加实用.STL集中在算法部分,而boost包含了不少工具类, ...

  6. material(一)

    项目目录如下 逻辑代码 import React from 'react'; import PropTypes from 'prop-types'; import Button from '@mate ...

  7. 【P1330】 封锁阳光大学

    两个和谐河蟹不能在同一条边的两端.所以对于每条边.只有一个节点有和谐河蟹 所以说,我们可以将有和谐河蟹的看做一种颜色,或则是状态.没有河蟹看做另一种言颜色 这样边变成了二分图染色 所以嗯~(・∀・) ...

  8. XML 对xml文件的crud的增加 create操作 增加元素 增加属性

    把创建的节点挂到上一节点的最后 找到参考节点,使用insertBefore方法进行插入位置 xml添加属性使用setAttribute方法

  9. JavaScript的执行机制

    JavaScript是单线程的,任务的执行时自上而下的,这就有了一个问题,当遇到一个比较耗时的任务时,下面的代码就会被阻塞,这就意味着卡死.所以js是有异步的,它的实现主要是通过事件循环(event ...

  10. JQuery实现父级选择器(广告实现)

    效果图如下: HTML代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...