爬了1000张清纯妹子私房照,我流鼻血了…[通俗易懂]

爬了1000张清纯妹子私房照,我流鼻血了…[通俗易懂]想看漂亮小姐姐照片?不如试试爬虫批量下载,自己一个人在被窝里慢慢看

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

闲扯几句

大家好,我是你们的老朋友青戈,之前分享了一篇Java爬虫的入门实战教程,收获了不少赞,看来大家伙对爬虫的热情度还是蛮高的哈。既然大家都这么想学爬虫,那今天就安排点刺激的。那你要非问我有多刺激,那我只能告诉,我看完…流鼻血了…?

插播一条反爬信息:本文作者:程序员青戈,博客:https://blog.csdn.net/xqnode

我知道大家平时工作生活都挺累的,要是程序员的话就更苦逼了,加不完的班,敲不完的bug,着实让老哥我有点心疼啊,那么这期就给大家放一波福利。高能预警!一大批美女即将来袭,请各位朋友们把持住,把持住啊!

爬了1000张清纯妹子私房照,我流鼻血了...[通俗易懂]
啥?看的不过瘾?我就知道你这么说,同样作为兄弟的我非常能理解啊,那么下面这篇教程你得好好看看了,因为这将直接决定你今晚能不能睡个好觉?

进入主题

今天我们爬取的网站是 唯美女生网 ,我们进来看看
爬了1000张清纯妹子私房照,我流鼻血了...[通俗易懂]

是不是很哇塞?都是好看的小姐姐?这谁顶得住啊,我就点进去瞅一眼

爬了1000张清纯妹子私房照,我流鼻血了...[通俗易懂]
卧槽?这什么鬼?小姐姐怎么变大妈了!
爬了1000张清纯妹子私房照,我流鼻血了...[通俗易懂]
导演:搞错了,再来!

爬了1000张清纯妹子私房照,我流鼻血了...[通俗易懂]

啊这,为什么让小小年纪的我看到这个?兄弟们,我又相信爱情了!曾经有一段真挚的爱情摆在我的面前,我没有好好珍惜,现在,她回来了,还是那么清纯、羞涩,穿着碎花的裙子,趴在床上向我微笑。

这,不就是青春吗?
这,不就是爱情吗?

还等什么?我来啦!

网页代码分析

回归主题哈,各位,我这个人有个不好的习惯,看到美女就走神,真是抱歉了,差点忘记了今天是来写代码的?

这个网站的站长估计每天被爬虫的烦死了,服务器顶着巨大的压力,曾经一段时间还频繁宕机。为了解决后患,他干脆关了网页的f12功能,不让看代码了,防止无数的se狼们搞他的小站,毕竟人家也不容易,你们干太猛了,怼太深了,不给人家活路啊

今天我为了写这篇教程,也是花尽了心思啊,想尽办法拿到了他的源码,你们猜我是怎么搞的?

不知道你们观察过没,平时你在看网站源代码的时候,地址栏的前面会多这一段:view-source:,后面跟的就是你实际的网站的地址,比如百度的源码是这样的:view-source:https://www.baidu.com

爬了1000张清纯妹子私房照,我流鼻血了...[通俗易懂]
那么同样的道理,我们也可以使用这个地址看这个网站的源代码,比如:view-source:https://www.vmgirls.com/15215.html
爬了1000张清纯妹子私房照,我流鼻血了...[通俗易懂]
我们从网页的源代码分析可以找到图片的位置,分析得出 a标签的href 属性就是图片的地址:
爬了1000张清纯妹子私房照,我流鼻血了...[通俗易懂]
随便点开看一下,证实我的想法:
爬了1000张清纯妹子私房照,我流鼻血了...[通俗易懂]
OK,确定了图片的位置,那就好办了

开始撸码

还是老规矩,我们继续使用 Jsoup 来进行网页数据抓取,先引入jsoup的包:

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

连接目标网页,得到 Document 对象:

Document document = Jsoup.connect("https://www.vmgirls.com/15298.html").get();

Document对象中获取到目标图片所在父级的 div ,获取到这个div之后,事情就简单多了。

我们从这个div中获取所有的a标签,然后判断,a标签的href属性是否包含 jpeg 关键字,如果包含了,那就是我们需要抓取的图片。

Elements elements = element.getElementsByTag("a");
        for (Element a : elements) { 
   
            String href = a.attr("href");
            if(href.contains("jpeg")) { 
   
                System.out.println(href);
            }
        }

打印下结果,确实是拿到了所有的图片。
爬了1000张清纯妹子私房照,我流鼻血了...[通俗易懂]
到了这一步算不算完成了呢?肯定没有啊,我们还没有下载到本地磁盘里面呢。不在自己电脑里怎么能在夜深人静的时候自己偷偷看啊?

那我们就得想办法把这些链接下载下来啊,Java下载网络文件非常简单,我这里为了省事呢,直接使用了第三方的工具类 hutool ,感兴趣的同学们可以自己去了解一下 hutool 这个甜甜的工具类啊,保证你用完一次就爱上他。官网地址:https://www.hutool.cn/

引入hutool

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.3.7</version>
</dependency>

下载图片到本地磁盘:

for (Element a : elements) { 
   
            String href = a.attr("href");
            if(href.contains("jpeg")) { 
   
        System.out.println(href);
        // 下载图片到项目根路径下的imgs文件夹中
        HttpUtil.downloadFile("https:" + href, new File(System.getProperty("user.dir") + "/imgs"));
    }
}

再跑一遍:
爬了1000张清纯妹子私房照,我流鼻血了...[通俗易懂]
控制台显示下载完成,我们打开本地磁盘的文件夹看看:
爬了1000张清纯妹子私房照,我流鼻血了...[通俗易懂]
爬了1000张清纯妹子私房照,我流鼻血了...[通俗易懂]
非常完美啊,看到这一排排的美女图片,内心还是有那么一丝丝的小躁动的 [害羞]

批量下载

刚才演示的是下载单个网页中的图片,那么很多坏家伙又会很好奇,怎么批量下载美女图片?

别以为我不知道你们的小心思哈,因为我也在琢磨呢,哈哈?

你别说,我还真找到办法了。

经过没日没夜的研究,我发现,不同网页的地址,是通过数字控制的,比如:https://www.vmgirls.com/14636.htmlhttps://www.vmgirls.com/15298.html

那么就是说我们找到了这个数字,问题就迎刃而解了。

那么去哪找这个数字呢?答案肯定是在首页啊,打开首页的源代码看看:
爬了1000张清纯妹子私房照,我流鼻血了...[通俗易懂]
我注意到这个 class=media-contenta 标签中包含了我们所需要的数据,所以我们来循环一次看看,是不是能拿到:

Document main = Jsoup.connect("https://www.vmgirls.com").get();
Elements medias = main.getElementsByClass("media-content");
for (Element media : medias) { 
   
    System.out.println(media.attr("href"));
}

跑了一下代码,确实拿到了这个数字的地址,但是数据还是有点混乱。
爬了1000张清纯妹子私房照,我流鼻血了...[通俗易懂]
我们需要做进一步的筛选,筛选出末尾是html结尾的地址。

Document main = Jsoup.connect("https://www.vmgirls.com").get();
Elements medias = main.getElementsByClass("media-content");
for (Element media : medias) { 
   
    String href = media.attr("href");
    if (href.endsWith("html")) { 
   
        System.out.println(href);
    }
}

再跑一次,这就完美了:
爬了1000张清纯妹子私房照,我流鼻血了...[通俗易懂]
接下来就好办了,有了网页的地址,我们只需要挨个循环,就能批量得到网页的数据了!

完整代码:

Document main = Jsoup.connect("https://www.vmgirls.com").get();
Elements medias = main.getElementsByClass("media-content");
for (Element media : medias) { 
   
    String url = media.attr("href");
    if (url.endsWith("html")) { 
   
        Document document = Jsoup.connect("https://www.vmgirls.com/" + url).get();
        Element element = document.getElementsByClass("nc-light-gallery").get(0);
        Elements elements = element.getElementsByTag("a");
        for (Element a : elements) { 
   
            String href = a.attr("href");
            if (href.contains("jpeg")) { 
   
                System.out.println(href);
                HttpUtil.downloadFile("https:" + href, new File(System.getProperty("user.dir") + "/imgs"));
            }
        }
    }
}
System.out.println("下载完成");

爬了1000张清纯妹子私房照,我流鼻血了...[通俗易懂]
怎么样?看到这琳琅满目的妹子,都是青春期的诱惑啊!心动没?没事,代码拿去,自己跑跑,晚上在被窝里偷偷看也没人知道的?

至少,我不会说出去~


我是程序员青戈,没错,逗比青年就是我了,还不赶紧来关注这个骚味十足的年轻人?

我的原创公众号:Java学习指南 最近正在筹备一批Java干货教程,现在关注还赶得上趟哦?

感谢你的阅读,看完别忘记三连哦?我们下期见~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/172013.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月22日 下午2:16
下一篇 2022年8月22日 下午2:36


相关推荐

  • Fork/Join框架基本使用[通俗易懂]

    1.概述ava.util.concurrent.ForkJoinPool由Java大师DougLea主持编写,它可以将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果,并进行输出。本文中对Fork/Join框架的讲解,基于JDK1.8+中的Fork/Join框架实现,参考的Fork/Join框架主要源代码也基于JDK1.8+。这几篇文章将试图解释Fork/…

    2022年4月5日
    47
  • 【spring mvc】spring mvc POST方式接收单个字符串参数,不加注解,接收到的值为null,加上@RequestBody,接收到{“uid”:”品牌分类大”},加上@RequestP…

    【spring mvc】spring mvc POST方式接收单个字符串参数,不加注解,接收到的值为null,加上@RequestBody,接收到{“uid”:”品牌分类大”},加上@RequestP…

    2022年4月3日
    41
  • word2vec原理与Gensim使用[通俗易懂]

    word2vec原理与Gensim使用[通俗易懂]word2vec原理1NeuralNetworkLanguageModel2CBOW2.1HierarchicalSoftmax2.2NegativeSampling3Skip-gram3.1HierarchicalSoftmax3.2NegativeSampling4负采样算法5.word2vec实战1NeuralNetworkLanguageModel…

    2022年5月16日
    58
  • MySQL——MySQL 图形化管理工具的介绍

    MySQL——MySQL 图形化管理工具的介绍文章目录MySQL——MySQL图形化管理工具的介绍1、MySQLWorkbench2、Navicat3、SQLyog4、DBeaver5、DataGripMySQL——MySQL图形化管理工具的介绍MySQL图形化管理工具极大地方便了数据库的操作与管理,常用的图形化管理工具有:MysQLWorkbench、phpMyAdmin、NavicatPreminum、MySQLDumper、SQLyog、dbeaver、MysQLODBcConnector、DataGrip。1、MySQL

    2022年6月30日
    26
  • SQL 存储过程 调试

    SQL 存储过程 调试SQL 存储过程调试 SqlServer 输出 print 变量名 nbsp nbsp print nbsp NextCount nbsp nbsp nbsp nbsp print nbsp nbsp 输出常量 在需要的位置写上 然后执行下述操作 执行一遍 对该存储过程进行保存然后选择需要执行的存储过程 填写对应的参数 点击确定执行 执行后会出现下述图片 点击消息查看自己的 print 输出结果

    2026年3月26日
    2
  • python中os.environ的使用详解

    python中os.environ的使用详解1 简介在 python 中 通过 os environ 获取环境变量 什么是环境变量呢 环境变量是程序和操作系统之间的通信方式 有些字符不宜明文写进代码里 比如数据库密码 个人账户密码 如果写进自己本机的环境变量里 程序用的时候通过 os environ get 取出来就行了 这样开发人员本机测试的时候用的是自己本机的一套密码 生产环境部署的时候 用的是公司的公共账号和密码 这样就能增加安全性 os environ 是一个字典 是环境变量的字典 通过 os environ get HOME 就

    2026年3月19日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号