爬了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干货教程,现在关注还赶得上趟哦?

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 数据结构导论 — (自考)「建议收藏」

    数据结构导论 — (自考)「建议收藏」自考学习时期又来了,首先学习的第一本自考科目是“数据结构导论”,刚拿到这本书的时候一头雾水,还不明白这本书讲解的是什么,通过三遍读书法(第一遍)的学习,对“数据结构导论”有了一定的认识,并且总结了下来。一.什么是数据结构导论首先要知道,我们在学习计算机解决问题过程中,离不开数据表示和数据处理,而数据表示的核心问题就—数据结构实现。跟设计模式一个道理,数据结构导论它…

  • 服务器资源监控工具—nmon

    服务器资源监控工具—nmon      在性能测试过程中,对服务端的各项资源使用情况进行监控是很重要的。对于监控服务器资源的工具nmon是最好不过了。      nmon不仅可以监控内存使用情况、磁盘适配器、文件系统中的可用空间、CPU使用率、页面空间和页面速度、异步I/O(仅适用于AIX)、网络文件系统(NFS)、磁盘I/O速度和读写比率、服务器详细信息和资源、内核统计信息、消耗资源进程、运行队列信息等。而且它资源…

  • 图片url地址的生成获取方法

    图片url地址的生成获取方法图片url地址的生成获取方法  在写博客插入图片时,许多时候需要提供图片的url地址。作为菜鸡的我,自然是一脸懵逼。那么什么是所谓的url地址呢?又该如何获取图片的url地址呢?  首先来看一下度娘对url地址的解释:url是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的url,它包含的信息指出文件的位置以及浏览器应该怎么处理它。  简单来说,url地址是是用来定位、访问网上资源用的。常见的网址也属于url地

  • 技术相关连接

    技术相关连接JavaScript:JavaScript ES6中export及export default的区别 :https://blog.csdn.net/zhou_xiao_cheng/article/details/52759632Vue:从vue新建页面过程看vue项目文件调用关系 :https://blog.csdn.net/weixin_43236610/article…

  • 引用数据类型分为哪三类_类都是引用数据类型吗

    引用数据类型分为哪三类_类都是引用数据类型吗Java引用数据类型(String)引用数据类型概述引用数据类型与基本数据类型的差别(举例说明)引用数据类型概述说到引用数据类型,那么何为引用数据类型?引用类型,都可以用null值作为值,也就是说可以在初始化的时候赋值为null,String是引用类型,也就是说可以使用null作为值。引用数据类型与基本数据类型的差别(举例说明)使用基本数据类型:inti1=1inti2=1这种是会在内存中存储两个1的值但是,使用引用类型就不会!Strings=“hello”Str

    2022年10月21日
  • 如何用html+js写一个自动发出声音的页面

    如何用html+js写一个自动发出声音的页面

发表回复

您的电子邮箱地址不会被公开。

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