nodejs爬虫与python爬虫_不再羡慕python,nodejs爬虫撸起袖子就是干,爬取宅男女神网大姐姐的高清图片!…[通俗易懂]

nodejs爬虫与python爬虫_不再羡慕python,nodejs爬虫撸起袖子就是干,爬取宅男女神网大姐姐的高清图片!…[通俗易懂]年前无心工作,上班刷知乎发现一篇分享python爬虫的文章。感觉他爬取的网站里的妹子都好好看哦,超喜欢这里的,里面个个都是美女。无奈python虽然入门过但太久没用早已荒废,最近在用nodejs重构后台接口,遂尝试用nodejs实现个爬虫。先上几张图:爬几个相册示范一下都是高清无码大图哦好了,开始准备工作吧,少年!喂!我说的是准备工作环境!你,你,还有你,你们把手上的纸巾放下!准备工作:系统环境:…

大家好,又见面了,我是你们的朋友全栈君。

年前无心工作,上班刷知乎发现一篇分享python爬虫的文章。

感觉他爬取的网站里的妹子都好好看哦,超喜欢这里的,里面个个都是美女。

无奈python虽然入门过但太久没用早已荒废,最近在用nodejs重构后台接口,遂尝试用nodejs实现个爬虫。

先上几张图:

nodejs爬虫与python爬虫_不再羡慕python,nodejs爬虫撸起袖子就是干,爬取宅男女神网大姐姐的高清图片!...[通俗易懂]

爬几个相册示范一下

nodejs爬虫与python爬虫_不再羡慕python,nodejs爬虫撸起袖子就是干,爬取宅男女神网大姐姐的高清图片!...[通俗易懂]

都是高清无码大图哦

nodejs爬虫与python爬虫_不再羡慕python,nodejs爬虫撸起袖子就是干,爬取宅男女神网大姐姐的高清图片!...[通俗易懂]

好了,开始准备工作吧,少年!

喂!我说的是准备工作环境!你,你,还有你,你们把手上的纸巾放下!

准备工作:

系统环境:mac (作为一个前端,应该不用我解释了吧?)

运行环境:node (作为一个前端,应该不用我解释了吧??)

所需模块:request-promise、cheerio、fs

编辑器:vscode (谁用谁知道)

简单了解一下这几个nodejs的模块:

var request = require(‘request-promise’);

request(‘http://www.google.com’)

.then(function (htmlString) {

console.log(htmlString)

})

.catch(function (err) {

});

任何响应都可以输出到文件流:

request(‘http://google.com/doodle.png’).pipe(

fs.createWriteStream(‘doodle.png’)

)

cheerio—-为服务器特别定制的,快速、灵活、实施的jQuery核心实现:

api类似jQuery,使用超简单

const cheerio = require(‘cheerio’)

const $ = cheerio.load(‘

Hello world

‘)

$(‘h2.title’).text(‘Hello there!’)

$(‘h2’).addClass(‘welcome’)

$.html()

//=>

Hello there!

fs—-Node.js 文件系统

可以创建目录,创建文件,读取文件等。

网页分析:

分析目标网站的相册网页地址

因为python文章的作者已经很详细的分析了网站,所以我就简单分析一下。

随便打开几个相册,可以看到都是这样的规则:

“https://www.****.com/g/****/”

所以我们就可以确定要爬取的基本url:

const base_url = ‘https://www.****.com/g/’;//爬取相册网页的基本网址

然后再看几乎每个相册底部都有页码,而我们要抓取的是整个相册,所以就要考虑分页的情况,点开分页,我们看到分页的url是这样的:

“https://www.****.com/g/****/*.html”

业务逻辑:

nodejs爬虫与python爬虫_不再羡慕python,nodejs爬虫撸起袖子就是干,爬取宅男女神网大姐姐的高清图片!...[通俗易懂]

实战代码:

app.js 轮询及代码结构

const nvshens = require(‘./co’);

const base_url = ‘https://www.nvshens.com/g/’;//爬取相册网页的基本网址

let index = 1;

let start = 25380;

const end = 30000;

const main = async (URL) => {

//1.请求网址

const data = await nvshens.getPage(URL);

//2.判断是否存在相册

if (nvshens.getTitle((data.res))) {

//3.下载照片

await nvshens.download(data.res);

//4.请求分页

index++;

const new_url = `${base_url}${start}/${index}.html`;

main(new_url);

} else {

index = 1;

console.log(`${base_url}${start}页面已完成`)

start++;

if (start < end) {

//5.请求下一个网址

main(base_url + start);

} else {

console.log(`${base_url}${end}所有页面已完成`)

}

}

};

main(base_url + start);

co.js //业务代码

var request = require(‘request-promise’); //网络请求

const cheerio = require(“cheerio”);//操作dom

const fs = require(“fs”);//读写文件

const headers = {

“Referer”: “https://www.nvshens.com/g/24656/”

}

//因为一些网站在解决盗链问题时是根据Referer的值来判断的,所以在请求头上添加Referer属性就好(可以填爬取网站的地址)。

//另外Referer携带的数据 是用来告诉服务器当前请求是从哪个页面请求过来的。

const basePath = “/Users/用户名/Desktop/mm/”;

//自定义mac本地下载目录,需预先创建,windows路径可参考评论

let downloadPath;

let pageIndex = 1;

module.exports = {

//请求页面

async getPage(url) {

const data = {

url,

res: await request({

url: url

})

}

return data;

},

//判断页面是否存在相册

getTitle(data) {

const $ = cheerio.load(data);

if ($(“#htilte”).text()) {

downloadPath = basePath + $(“#htilte”).text();

//创建相册

if (!fs.existsSync(downloadPath)) {

fs.mkdirSync(downloadPath);

console.log(`${downloadPath}文件夹创建成功`)

}

return true;

} else {

return false;

}

},

//下载相册照片

async download(data) {

if (data) {

var $ = cheerio.load(data);

$(“#hgallery”).children().each(async (i, elem) => {

const imgSrc = $(elem).attr(‘src’);

const imgPath = “/” + imgSrc.split(“/”).pop().split(“.”)[0] + “.” + imgSrc.split(“.”).pop();

console.log(`${downloadPath + imgPath}下载中`)

const imgData = await request({

uri: imgSrc,

resolveWithFullResponse: true,

headers,

}).pipe(fs.createWriteStream(downloadPath + imgPath));

})

console.log(“page done”)

}

},

}

跑起来

node app.js

nodejs爬虫与python爬虫_不再羡慕python,nodejs爬虫撸起袖子就是干,爬取宅男女神网大姐姐的高清图片!...[通俗易懂]

几个函数就可以实现,是不是很简单呢?

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 青龙面板从零搭建教程(一)

    青龙面板从零搭建教程(一)大家好,QX系列教程教会了大家js脚本挂机的基础玩法,Boxjs为这个玩法提升了不少可玩性,但是IOS系统下最多支持2个账号,许多助力需求无法满足,应群友要求出一个青龙从零开始搭建教程,欢迎大家入群交流:106511927注意教程看不懂的话可以进群找群主帮你代挂!如果本教程看不懂或者操作出现问题,证明您的计算机专业知识并不支持本文章的搭建操作。第一步购买云服务器个人推荐阿里云服务器1核2G即可搞活动一年一百来块钱系统选择CentOs7等待配置完成。百度搜索Finalshell下载安装

    2022年6月13日
    81
  • CentOS7上ElasticSearch安装填坑记「建议收藏」

    CentOS7上ElasticSearch安装填坑记

    2022年3月13日
    35
  • ps插件套装imagenomic磨皮滤镜安装教程「建议收藏」

    ps插件套装imagenomic磨皮滤镜安装教程「建议收藏」为大家推荐一款知名的PS磨皮降噪滤镜套装,ImagenomicProfessionalSuitemac版中包含noiseware降噪插件、portraiture3磨皮滤镜和Realgrain胶片效果滤镜插件,各有各的功能,轻松进行磨皮、添加胶片效果、降噪等操作,小编这里准备了最新的imagenomic滤镜激活成功教程教程,赶紧试试imagenomic磨皮滤镜吧!imagenomic激活成功教程教程…

    2022年7月22日
    10
  • pycharm默认主题_pycharm设置背景

    pycharm默认主题_pycharm设置背景一、Pycharm基本设置(小白篇)1、打开Pycharm设置,【File】-【Settings】2、设置解释器,【File】-【Settings】-【Project:项目名字】-【ProjectInterpreter】-【设置图标】-【Add】-【浏览到目标解释器】,选择相应解释器即可。3、设置pycharm主题,【File】-【Settings】-【Appearance&Behavior】-【Appearance】;Theme:修改主题、Usecustomf

    2022年8月27日
    2
  • kafka队列模式_redis消息队列和mq

    kafka队列模式_redis消息队列和mq一、消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ二、消息队列应用场景以下介绍消息队列在实际应用中常用的使用场景。异步处理,应用解耦,流量削锋和消息通讯四个场景。2.1异步处理场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种1.串行的方式;2.并行方式a、串行方式:将注册

    2022年10月9日
    2
  • 【参赛作品29】基于openGauss数据库设计人力资源管理系统实验「建议收藏」

    【参赛作品29】基于openGauss数据库设计人力资源管理系统实验「建议收藏」本文作者:瓜西西本文主要面向openGauss数据库初学者,帮助初学者完成一些简单的数据库管理以及GUI,设计一个简单的人力资源管理系统。本文只包含部分代码,读者需要结合自己的数据库弹性公网、数据库用户及其密码等自身信息做出相应的修改。一、实验环境使用程序:putty.exe;IntelliJIDEA2021.1.1;apache-tomcat-9.0.46服务器名称:ecs-d8b3弹性公网:121.36.79.196端口号:26000表空间名:human_resource_

    2022年5月24日
    36

发表回复

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

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