爬了1000张清纯妹子私房照,我流鼻血了...

Python三步爬取VMgirls小姐姐图片 Python三步爬取VMgirls小姐姐图片具体思路第一步:确定目标第二步:分析目标网站第三步:代码编写 具体思路 第一步:确定目标:寻找目标网站,我选择的网站是http://www.VMgirls.com,这个网站我很喜欢。嘿嘿!(你懂的) 第二步:分析目标网站的html源码及网页规则 1.请求网页 2.解析网页 3.找到图片URL 4.找到网站hearders规则 第三步:编写代码 第一步:确定目标 网址:https://www.vmgirls.com/ 第二步:分析目标网站 通过开发者工具找到该网站 阅读详情
AI摘要

本文介绍了如何使用Java爬虫工具Jsoup结合Hutool下载唯美女生网的美女图片。首先分析网页源码找到图片URL,然后通过循环遍历不同页面批量下载图片,并提供了完整的代码示例。同时,文章还展示了如何从首页获取所有图片页面的链接,实现批量下载功能。

闲扯几句

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

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

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


啥?看的不过瘾?我就知道你这么说,同样作为兄弟的我非常能理解啊,那么下面这篇教程你得好好看看了,因为这将直接决定你今晚能不能睡个好觉😂

进入主题

今天我们爬取的网站是 唯美女生网 ,我们进来看看

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


卧槽?这什么鬼?小姐姐怎么变大妈了!

导演:搞错了,再来!

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

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

还等什么?我来啦!

网页代码分析

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

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

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

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


那么同样的道理,我们也可以使用这个地址看这个网站的源代码,比如:view-source:https://www.vmgirls.com/15215.html

我们从网页的源代码分析可以找到图片的位置,分析得出 a标签的href 属性就是图片的地址:

随便点开看一下,证实我的想法:

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);
            }
        }

打印下结果,确实是拿到了所有的图片。

到了这一步算不算完成了呢?肯定没有啊,我们还没有下载到本地磁盘里面呢。不在自己电脑里怎么能在夜深人静的时候自己偷偷看啊😆

那我们就得想办法把这些链接下载下来啊,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"));
    }
}

再跑一遍:

控制台显示下载完成,我们打开本地磁盘的文件夹看看:


非常完美啊,看到这一排排的美女图片,内心还是有那么一丝丝的小躁动的 [害羞]

批量下载

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

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

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

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

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

那么去哪找这个数字呢?答案肯定是在首页啊,打开首页的源代码看看:

我注意到这个 class=media-content 的 a 标签中包含了我们所需要的数据,所以我们来循环一次看看,是不是能拿到:

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"));
}

跑了一下代码,确实拿到了这个数字的地址,但是数据还是有点混乱。

我们需要做进一步的筛选,筛选出末尾是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);
    }
}

再跑一次,这就完美了:

接下来就好办了,有了网页的地址,我们只需要挨个循环,就能批量得到网页的数据了!

完整代码:

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("下载完成");


怎么样?看到这琳琅满目的妹子,都是青春期的诱惑啊!心动没?没事,代码拿去,自己跑跑,晚上在被窝里偷偷看也没人知道的🤭

至少,我不会说出去~


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

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

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

《第一个爬虫项目-爬取唯美小姐姐网站》配套源代码文件 《第一个爬虫项目-爬取唯美小姐姐网站》配套源代码文件,免费下载,供python学习者交流之用,以及爬虫爱好者交流学习之用。 立即下载

相关推荐

在线磁力链接种子文件边下边播源码

磁力云播 一个在任何地方都能解析磁力链接和种子文件的网站 它使用了 WebTorrent - 种子文件和磁力链接解析客户端的网站 WebTorrent 使用了 WebRTC进行真正的点对点传输。不需要浏览器插件,扩展或程序安装。 实例:https://magnet.vmgirls.com

Opencv加QOpenGLWidget 手撸视频播放器,实现自己的看片神器

Opencv加QOpenGLWidget 手撸视频播放器,实现自己的看片神器 开发环境: VS2017+QtQt5.9.3+Opencv3.4.3 废话不多说,直接上代码 MyXVideo.h #pragma once #include <QOpenGLWidget> #include<QTimerEvent> #include <QPaintEvent> #include "opencv2/core.hpp" #include "opencv2/imgcodecs.hp

weixin_42309565的博客 23万+

深入MoveIt与OMPL集成开发:从源码编译到自定义规划算法实战

本文详细介绍了如何从源码编译集成MoveIt与OMPL,并实现自定义规划算法的完整流程。通过清理环境、获取源码、解决编译依赖与错误,最终指导开发者创建并集成名为MyRRT的自定义规划算法,从而实现对机器人运动规划栈的深度定制与优化。

h0i1j2k3l的博客 467

四个福利性在线网站分享,每一个都让你欲罢不能……

随着社会的不断发展,我们网络上的一些资源就像雨后春笋一般的拔地而起,许多东西我们的来不及上车就被新的事物给掩盖了,但是对于一些好用的网站来说是真的很不错,小编今天就和你们分享一些最具福利性的在线网站! 你们准备好了吗?老司机准备发车了: 一.TinEye.com—图片搜索引擎 如果你的电脑或者你的手机里有一张不知道哪里来的图片,你想要将图片的源地址给找出来该怎么做?一般的时候我们都是束手无策,但是有了这个网站就不一样,可以图片上传带上去进行查找...

weixin_43363835的博客 430万+

LangChain Message 官方文档

消息是聊天模型中的基本通信单位。它们用于表示聊天模型的输入和输出,以及与对话相关的其他上下文或元数据。每条消息都包含一个角色(如“用户”、“助手”)和内容(如文本或多模态数据),并可能包含根据不同聊天模型提供商而有所不同的附加元数据。LangChain 提供了一个统一的消息格式,可以跨不同聊天模型使用,简化用户在不同模型之间切换时所需关注的消息格式差异。

AI Agent 首席体验官 896

从零配置EtherCAT IGH主站:手把手教你处理内核版本与实时性优化的那些坑

本文详细指导如何从零配置EtherCAT IGH主站,涵盖内核版本适配、实时性优化及常见问题解决方案。通过精确匹配内核头文件、应用实时补丁和优化网卡驱动,帮助开发者实现微秒级响应,适用于工业自动化、机器人控制等高精度场景。

weixin_30790841的博客 381

一些有用的网站。

1、GitHub上的xUtils下载和说明。 https://github.com/wyouflf/xUtils3

1万+

省三医院新门诊大楼网络安全建设项目实施方案

为了响应国家建设数字医疗,构建医联网、医共体的号召,新门诊大楼现有计算机网络,实现各门诊室、药房、医学影像科室及后勤科室的终端数据互通。在互联网出口以三层模式部署两台防火墙,作为连接公网的出口设备;出于等保合规和自身业务安全的考虑,现需要该网络上通过网络安全设备实现安全建设。公网出口防火墙,配置攻击防御策略,防御互联网上的病毒进入内网。公网出口防火墙配置攻击防御策略,防御外网对内网的入侵行为。服务器取得边界防火墙,配置攻击防御策略,入侵防御策略。公网出口防火墙配置入侵防御策略,防御外网对内网发起的D。

m0_63645854的博客 2013

【撸网站第一天】开篇

今天准备撸一个网站,主要撸一下他的技术点,包括:前端、结构、后端、压力测试 等等。 现介绍一下这个网站:http://xingship.com 测试下来,这个网站貌似只能在手机上使用,我在pc上显示的效果并不是很好,不知道站长是否可以兼容一下pc端。 如下效果: 很丑,但是当我跑到手机上来看的时候,还像那么回事。 网站呢,主要是电影短视频的介绍。 开始我以为这个是网站的布局是这一个标准的网格布局,但是其实他是个瀑布模式。第二篇,我们来详细介绍这个,好啦,今天由于时间关系,就现记录到这..

xingxingzhilong的专栏 21万+

ADS交叉耦合振荡器VCO相位噪声优化仿真实践

本文详细介绍了在ADS软件中搭建和优化交叉耦合VCO相位噪声的完整仿真实践。通过谐波平衡与瞬态仿真分析电路性能,并重点阐述了通过提升谐振腔Q值、优化晶体管工作点及改善尾电流源来有效降低相位噪声的具体方法,为射频电路设计提供了实用指南。

weixin_29235923的博客 630

ArcGIS与地理加权回归GWR【一】

因此,在实际问题研究中我们经常发现回归参数在不同地理位置上往往表现为不同,也就是说回归参数随地理位置变化,这时如果仍然采用全局空间回归模型(全局假设β是不会变得),得到的回归参数估计将是回归参数在整个研究区域内的平均值,如上所说某一个因素在ABC等不同的地理位置对房价的影响是不同的,假如采用全局空间回归模型,便忽略了数据的空间位置属性,只反映平均意义下因变量与自变量的相关关系,而不能有效反映回归关系的空间非平稳性的特征。当自变量为1个时,是一元线性回归,自变量为2个及以上时,称为多元线性回归。

JData_Engineer的博客 1373

Python爬虫实战—vmgrils图片网站

一、实战背景 唯美女生:https://www.vmgirls.com/ 少女情怀总是诗,一双发现美的眼睛! 工具:Python3.7,PyCharm 程序所需用到的模块:requests,fake_useragent,parsel,os,time 所使用的解析器:xpath 二、明确目标 明确我们需要爬取哪个图片集的图片资源,这里以少女情怀总是诗为例。 2.1 分析我们需要爬取的图片链接地址 按F12打开开发者工具 这里可以看见,选择 a 标签中的 href 属性或者 img 标签中的 src 属性都是

qq_43401941的博客 7445

uniapp - Invalid value “iife” for option “output.format” - UMD and IIFE output formats are not suppo

Invalid value “iife” for option “output.format” - UMD and IIFE output formats are not supported for code-splitting builds. uniapp 编译报错,vite vue3 Hbuilder 中编译报错,uniapp 打包 App 报错(vue3)hbuilder提示错误,uniapp运行到手机/模拟器 App 报错(vue3)uniapp项目启动报错,如何解决这个问题,安卓app,苹果app

🏆 前端领域优质创作者 3964

java打飞机小游戏(跟着网上视频写到)

package 飞机小游戏; //如果觉得好的话,给一点积分哦,太痛苦了,平时下一点资料都得需要 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import jav

wangshuo2020的博客 4万+

OpenClaw安卓手机攻略

想在安卓手机上安装 OpenClaw,目前主要有两种主流方法:一种是使用专门的,操作简单直观;另一种是在命令行环境下进行,自由度更高。你可以根据自己的偏好和动手能力来选择。

suny8的专栏 2899

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

分享7个比B站更刺激的老司机网站,别轻易点开

俗话说摸鱼一时爽,一直摸一直爽,作为一个程序员老司机了,一头乌黑浓密的头发还时不时被同事调侃,就靠这10个网站让我健康生活,不建议经常性使用,因为还有一句俗话,那就是“摸鱼一时爽,没有年终奖”,记得点赞收藏!

JNPF 专注低代码开发 12万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

视频教程-javascript案例大全-JavaScript

javascript案例大全 拥有6年web前端和后端开发经验,4年授课经验...

weixin_29647515的博客 544

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

爬虫学习笔记(五)——VMGIRLS唯美小姐姐的图片不让爬了,怎么办?

系列文章目录 <font color=#999AAA 爬虫学习笔记(四)——糗百爬虫遇到的反爬 爬虫学习笔记(三)——利用JSON爬取豆瓣热映的使用 爬虫学习笔记(二):requests基础用法之爬取各类主流网站2 爬虫学习笔记(一):requests基础用法之爬取各类主流网站1 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、爬取图片的最简化操作?二、遇到问题1.页面无法进入开发者模式2.完善hearders内容总结 前言 爬虫一入坑,简直没法停

knight0113的博客 7684

干货分享!骨灰级宅男珍藏的6大资源网站,个个都很强大

2020元旦假不想出门浪,这6个资源丰富的网站,让你宅家也精彩高福利的6大资源网站都在这里了,你绝对用得着,建议收藏 小说、电影、办公……这6个高效资源网站,让你相见恨晚! 节假日不想出去看“人头”,宅在家又怕无聊?想看好一点的电影小说,但动不动要收费?四处找资源,浪费时间浪费精力?今天分享5个高效干货级的资源网站,为你解决这些烦恼! 1、纪录片网站——纪录片天地 这里面有科学探索、社会...

dainikanxiaoshuo的博客 48万+

4-4 JDBC基础

根据提示,在右侧编辑器补充代码,在student表中插入如下数据 no:11 name:张三 password:123 sex:男 salary:300.0 no:12 name:李四 password:123 sex:男 salary:80.0 no:21 name:王五 password:133 sex:女 salary:40.0。Jdbc程序运行完后,切记要释放程序在运行过程中创建的那些与数据库进行交互的对象,这些对象通常是。

码字不易,大家的支持就是我坚持下去的动力 960

19个免费的ppt制作网站

免费ppt制作网站

HH112586的博客 1228万+

54部经典国外动画片---送给70-80年代的朋友

 From: http://www.dvd288.com/html/2006/04/20060408001657.shtml童年啊,童年原来发现我们已经看过了那么多经典的动画片了,而且以前的主题歌也是那么的动听,无论是翻唱还是原声,都勾起了小时候的美好回忆,愿与君分享 1。法国动画片《巴巴爸爸》《巴巴爸爸》【原 片 名】Barbapapa 【出品年代】1975年 【出品公司】Polyscop

Kay's Blog 7万+

网址大全

<br />【网页设计】 visualJquery   JqueryAPI   Jquery中文入门指南

网站建设 3880

手把手撸个博客网站

node-webserver-blog-public 源码地址 博客地址 优快云 运行项目前必读 三个项目中各种各样的授权参数 已全部修改成自己的授权参数,忘悉知!!!!忘悉知!!!!忘悉知!!!! 自己创建一个数据库名称就可以了,表是运行 node 时候自动创建好 以 myblog3 为数据库名称, admin 登录页面有个 一键生成地方生成账号:admin 密码:123, 只能生成一次,因...

Zhooson的博客 4万+

资源收集

教程连接 CVS手册 NBearV3中文教程总目录 Python 教程 审视 AJAX 系列(IBM) 掌握 Ajax 系列(IBM) AJAX DHTML教程 DHTML手册 XML教程2 VSS教程 VS2005教程 C 常见问题教程 数据结构教程 UML教程 Google教程 WSS教程 Websharp教程

青草堂 8万+

撸个注解有什么难的 请看这里

01、注解是什么 注解(Annotation)是在 Java 1.5 时引入的概念,同 class 和 interface 一样,也属于一种类型。注解提供了一系列数据用来装饰程序代码(类、方法、字段等),但是注解并不是所装饰代码的一部分,它对代码的运行效果没有直接影响(这句话怎么理解呢?),由编译器决定该执行哪些操作。 来看一段代码,我随便写的,除了打印到控制台的那句宣传语,其他都不重要,嘻嘻...

wangrui813的博客 1930
上一篇: 【Java爬虫】学爬虫从简单的开始,无门槛小白都能学会,带你爬取豆瓣电影Top250
下一篇: 面试官问你:程序=算法+数据结构,能深入讲讲吗?
程序员青戈
程序员青戈 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄10年 3万+粉丝 250原创
评论 108
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员青戈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值