爬了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)
blank

相关推荐

  • 详解java中静态方法有哪些_java类中的静态变量

    详解java中静态方法有哪些_java类中的静态变量定义:在类中使用static修饰的静态方法会随着类的定义而被分配和装载入内存中;而非静态方法属于对象的具体实例,只有在类的对象创建时在对象的内存中才有这个方法的代码段。注意:非静态方法既可以访问静态数据成员又可以访问非静态数据成员,而静态方法只能访问静态数据成员;非静态方法既可以访问静态方法又可以访问非静态方法,而静态方法只能访问静态数据方法。原因:因为静态方法和静态数据成员会随着类…

    2022年10月24日
  • W3C网页标准_网页规范

    W3C网页标准_网页规范什么时W3C标准?网页的制作的主要标准是W3C制定的WEB技术标准,W3C:(worldwidewebconsortium)万维网联盟,万维网联盟创建于1994年,是web技术领域最具权威和影响力的国际中立性技术标准机构。WEB标准WEB标准不是某一个标准,而是一系列标准的集合。网页主要由三部分组成:结构(structure),表现(presentation)和行为(behavior)。对应的标准也分为三方面:结构化标准语言主要包7777777777777777777777777777777.

  • js循环精灵图

    js循环精灵图js循环精灵图循环精灵图可以不用在给每一个小块一一的修改位置。左侧是一大张背景图右侧是成品是预览图这个背景图的位置其实是有规律的,每两张之间间隔一个固定长度,这个固定长度刚好等于一个小图标的长度,我们使用的这个图间隔44px。 <scripttype=”text/javascript”> varlis=document.querySelectorAll…

  • 初识CDN加速

    初识CDN加速

  • keil5 for arm_keil can’t open file

    keil5 for arm_keil can’t open file最近在写程序时,出现了个大问题,想在我用Keil写程序那么多个月,什么Bug我没见过,就在我建立好STM32的模板时后向里边添加文件时,编译后出现了这个问题,重新组建可能会解决这个问题,但是我没有.Google之后,问题解决的方案大致有两个/—————————————————————————…

  • 为什么很多电影字幕和台词对不上_你不是电影而是现实

    为什么很多电影字幕和台词对不上_你不是电影而是现实首先,要申明一点,过去与现在,电影的字幕都不是问题。并且,网络如此自由,未来也不是问题。只是分享的平台不会一家独大,分享的途径方式也会多种多样。防止还有人不知道如何加载字幕,再说明一下。1、将.srt

发表回复

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

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