一、Jsoup概述

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
主要功能:
1. 从一个URL,文件或字符串中解析HTML;
2. 使用DOM或CSS选择器来查找、取出数据;
3. 可操作HTML元素、属性、文本;

二、jsoup爬取图片

以 https://www.hellorf.com/image/search 网站为例,根据关键词爬取相关的图片。

项目依赖

     <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.10.2</version></dependency>


当我们直接在网页中搜索的时候,是可以看见浏览器地址栏上的信息的,我们将 “”https://www.hellorf.com/image/search?q=煎饼果子“”复制到Java代码中去发现要搜索的关键字被压缩编码了。

原因是请求头的编码为gzip

这时要使用一些字节数据将输入的汉字正确处理为编码后的值,这里写了一个gzip的工具类。

public class GzipUtils {public static void main(String[] args) throws IOException {String str = "煎饼果子";byte[] bytes = str.getBytes();byte[] gzipBytes = gzip(bytes);byte[] unGzipBytes = unGzip(gzipBytes);String value = byteToHexString(unGzipBytes);String finalString = getFinalString(str);System.out.println(value);System.out.println(finalString);}public static byte[] gzip(byte[] content) throws IOException {ByteArrayOutputStream baos = new ByteArrayOutputStream();GZIPOutputStream gos = new GZIPOutputStream(baos);ByteArrayInputStream bais = new ByteArrayInputStream(content);byte[] buffer = new byte[1024];int n;while ((n = bais.read(buffer)) != -1) {gos.write(buffer, 0, n);}gos.flush();gos.close();return baos.toByteArray();}public static byte[] unGzip(byte[] content) throws IOException {ByteArrayOutputStream baos = new ByteArrayOutputStream();GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(content));byte[] buffer = new byte[1024];int n;while ((n = gis.read(buffer)) != -1) {baos.write(buffer, 0, n);}return baos.toByteArray();}public static String byteToHexString(byte[] bytes) {StringBuffer sb = new StringBuffer(bytes.length);String sTemp;for (int i = 0; i < bytes.length; i++) {sTemp = Integer.toHexString(0xFF & bytes[i]);if (sTemp.length() < 2)sb.append(0);sb.append(sTemp.toUpperCase());}return sb.toString();}public static String getFinalString(String str) throws IOException {//1.转字节数组byte[] bytes = str.getBytes();//2.压缩字节数组byte[] gzip = gzip(bytes);//3.将压缩的字节数组再解压byte[] unGzip = unGzip(gzip);//4.将解压的字节数组转为字符串String value = byteToHexString(unGzip);StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("%");int count = 0; // %E5%A4%A7%E9%97%B8%E8%9F%B9for (int i = 0;i < value.length();i++){count++;if (count == 3){count = 1;stringBuilder.append("%");}char charStr = value.charAt(i);stringBuilder.append(charStr);}return stringBuilder.toString();}}

运行main方法后查看控制台

这样就和编码后的数据一致了。

爬虫代码编写

public class HtmlParseUtils {public static void main(String[] args) throws IOException {String str = "煎饼果子";String finalString = GzipUtils.getFinalString(str);List<String> list = parseImg(finalString);for (String s : list) {System.out.println(s);}}public static List<String> parseImg(String keywords) throws IOException {ArrayList<String> images = new ArrayList<>();String url = "https://www.hellorf.com/image/search?q=" + keywords;Document document = Jsoup.parse(new URL(url),9999);//Elements img = document.getElementsByTag("img");List<Element> elements = document.getElementsByTag("img").subList(0, 5);for (Element element : elements) {String src = element.attr("data-src");if (src == null || "".equals(src)){src = element.attr("src");}images.add(src);}return images;}
}

控制台查看结果:

使用Jsoup爬虫爬取相关图片相关推荐

  1. Python爬虫爬取相关图片

    简要的实现实现Python爬虫爬取百度贴吧页面上的图片,下面的网页就是本篇博客所要爬的网页,当然看到的只是其中的一部分图片,是所要爬取的页面, 而下图则是最终的爬取的图片: 接下来就简要的讲讲爬取的整 ...

  2. Android 通过okhttp + jsoup 爬虫爬取网页小说

    Android 通过okhttp + jsoup 爬虫爬取网页小说 效果图 1.准备工作 测试地址:http://www.tlxs.net 第三方依赖: implementation 'com.squ ...

  3. node:爬虫爬取网页图片 1

    代码地址如下: http://www.demodashi.com/demo/13845.html 前言 周末自己在家闲着没事,刷着微信,玩着手机,发现自己的微信头像该换了,就去网上找了一下头像,看着图 ...

  4. 小爬虫爬取小猫咪图片并存入本地文件夹

    小爬虫爬取小猫咪图片并存入本地文件夹 本人是安徽工业大学电气与信息工程学院研一学生,最近还不能开学真的是很糟心哦,由于自己比较笨吧,起步较晚还要忙着学习机器学习还有计算机视觉,但是总学这个感觉很闷也没 ...

  5. python爬虫,爬取下载图片

    python爬虫,爬取下载图片 分别引入以下三个包 from urllib.request import urlopen from bs4 import BeautifulSoup import re ...

  6. python爬虫爬取百度图片总结_python爬虫如何批量爬取百度图片

    当我们想要获取百度图片的时候,面对一张张图片,一次次的点击右键下载十分麻烦.python爬虫可以实现批量下载,根据我们下载网站位置.图片位置.图片下载数量.图片下载位置等需求进行批量下载,本文演示py ...

  7. 上手快!!福利局!新手如何使用python爬虫爬取网页图片(使用正则进行数据解析)当然这个新手是我自己

    作为一个python新入门小白,突然就想发个博客,一方面为了记录学习历程,一方面能分享给新入门的同学经验,更多的是想和大家一起学习和交流.以下是我以小白的角度分享的爬虫的相关知识和一个简单的爬取网页图 ...

  8. jsoup爬虫,爬取全站代码

    最近使用jsoup扒了几个网站,感觉bug改的差不多了,于是写出来与大家分享. 首先我会把爬虫基础的爬取思路与部分重要方法展示出来,最后我会把全部代码贴出来.并且我会写一个Main类,里面就是爬虫的模 ...

  9. 利用python爬虫爬取斗鱼图片(简单详细)

    关于 在一个安静的夜晚,我缓慢的打开了电脑,望着已经睡着的父母,我轻轻的把门关上,看着斗鱼颜值主播的魅力,我不尽感叹,要是每天都可以不需要那么麻烦的去看那该有多好! 于是我想起了最近刚学的爬虫,嘴角露 ...

最新文章

  1. 大数据在高校的应用场景_高校大数据及AI应用解决方案
  2. 9个必知的Python操作文件/文件夹方法
  3. php 科研,科研之路2
  4. 普通筛法时间界的证明
  5. OpenGL ES GLKit初探
  6. python合并单元格 索引_python笔记:纵向合并表格
  7. 久游遭受重创的ng2b
  8. linux 网卡命令 mtu,Linux网络命令
  9. javascript之对象
  10. c语言 list 使用数组来实现_C|用数组或链表来实现队列这种抽象数据类型
  11. poj 2705 Tangled in Cables 基础prim
  12. 谷歌翻译API, 免费采集翻译
  13. Java随机生成中文姓名工具
  14. 网格搜索算法与K折交叉验证
  15. Java8新特性学习第一天
  16. Android 获取/设置:窝蜂移动数据网络状态
  17. 其实,我对你是有一些失望的。
  18. React Native实践之携程Moles框架
  19. 真假屏幕测试软件,如何检测4K电视屏幕的真伪,漏出死像素?一键识别两种工具!...
  20. 学习post抓包最好用的抓包工具

热门文章

  1. JavaScript事件委托之鼠标移入移出事件
  2. XP 修复 ubuntu 启动
  3. 用php写百度收录api推送,百度实时推送api接口应用示例
  4. 移动应用安全过去及未来发展情况思考汇总
  5. linux oracle 03113,oracle之ORA-03113
  6. UML建模与软件开发设计(四)——包图设计
  7. 【效率】如何让你的Mac更高效的工作
  8. 解压密码免费获取 就在QQ群文件【二级建造】
  9. 【企业网站模板】企业网站模板平台建站教程
  10. 一:虚拟化之KVM(上)