nodejs 爬虫

article/2025/10/11 2:37:48

目标:爬取百度搜索到的女生头像(百度图片通用)

1. 下载node

可以去官网下载最新版node.js安装程序。(地址:node官网)

2. 下载需要的依赖(模块)

这里需要用到superagent模块和node内置的fs模块,所以我们只需要下载superagent模块即可。

下载指令:npm install superagent (-g)加上-g是全局的意思,不加就是在你当前输入指令的目录下安装。

 3. 查看目标网站

 我们可以看到百度图片使用了懒加载,假如我们直接用代码来请求的话,那么就只能拿到很小一部分的图片,所以我们这里去手动拿到页面的信息,往下滑动滚动条,滑到你想要的位置之后,打开控制台(右键检查、F12、ctrl+shift+i),然后去复制html标签内容,创建一个文件(text.txt),将我们复制的页面内容放里面,接着我们就可以开始编写代码了。

我们先来分析一下页面,去检查页面上的图片:

 我们可以发现,图片的链接在data-imgurl="xxxxxxxxx"中,那么就可以通过正则来获取图片的链接。

话不多说,直接上代码

// 引入superagent模块,用于请求网址
const superagent = require('superagent');
// 引入fs模块,用于将获取到的图片数据保存到本地
const fs = require('fs');// 读取页面内容
fs.readFile('./text.txt','utf-8',(err,data)=>{if(err){console.log('读取失败');}else{const txt = data.toString();// 编写正则表达式const reg = /(data-imgurl="https:\/\/).+?(fm=253&amp;)/g;// 使用正则获取页面内容中所有符合规则的字符串(这里获取出来的字符串就是所有图片的链接)(txt.match()方法返回值是个数组)const URLS = txt.match(reg);// 声明一个变量用于文件命名let num = 0;// 利用定时器+循环请求(每3000毫秒请求10张图片)let timer = setInterval(() => {for(let i = 0; i < 10; i++){// 获取到图片的链接const URL = (URLS[num*10+i].split('="'))[1];// 请求图片地址 利用pipe管道传输给文件模块写入到本地的img文件夹下superagent.get(URL).pipe(fs.createWriteStream('./img/'+(num*10+i)+'.png'));console.log('第'+(num*10+i)+'张图片抓取成功');// 判断请求完毕所有的图片后停止定时器if ((num*10+i)==a.length){// 延时3000毫秒之后停止(因为nodejs是一个异步程序,循环执行完毕之后可能 请求/写入 还在执行,所以我们不能直接停止程序,需要等 请求/写入 执行完毕之后再行停止)setTimeout(() => {clearInterval(timer);console.log('抓取完毕');},3000);break;}}num++;},3000);}
});

这里有一个关键点,node是一个单线程异步程序,我们循环执行完毕时,图片的访问和文件的写入可能还没有执行完毕,这时候停止程序的话最后的几张图片可能获取不到或者写入一半被终止,导致图片损坏,所以我们要写上延时器等待几秒之后再停止程序。

我们来看一下效果图

总结:那么到这里百度图片的爬取就已经完毕了,希望对你有所帮助,good bye!


http://chatgpt.dhexx.cn/article/Yqn3WQeN.shtml

相关文章

JS逆向爬虫(一)

目录 需要做的事情 一、安装与配置文档 1、node.js安装与配置 2、VSCode安装 3、在VSCode中运行 二、JS常用算法 1、md5 线性散列算法 2、DES/AES对称加密算法 3、RSA 非对称加密算法 4、base64 伪加密算法 三、js逆向案例 1、有道笔记翻译(MD5) 进行js代码调试的流…

爬虫中js的解析

每日分享&#xff1a; 做人要狠 任何关系&#xff0c;合得来就合&#xff0c;合不来就散&#xff0c;没有什么大不了的&#xff0c;理解多了&#xff0c;迁就多了&#xff0c;顾忌多了&#xff0c;痛苦自然就多了&#xff0c;完全没这个必要。别说我狠&#xff0c;以前我比谁…

Node.js爬虫实战:如何快速获取网站数据?

思考&#x1f914; 假设你正在为公司做市场调研&#xff0c;你需要获得一些能够提供关于你的目标受众的信息以进行研究&#xff0c;但是你发现这些信息并不能直接获取。你人工地搜索每个网站是不现实的&#xff0c;所以你需要一种更高效、更自动化、更快速的方式来获取这些信息…

Python爬虫:抓取js生成的数据

之前的NLP课程作业要求爬取一些科技新闻来训练语言模型&#xff0c;本文就简单来说一说用Python来爬取新闻的过程。虽然以前写过简单的爬虫&#xff0c;但是没有处理过浏览器动态加载数据的情况&#xff0c;这次碰到了就记录一下。 这次爬取的新闻来源是 新浪科技滚动新闻&…

js爬虫

互联网 Web 就是一个巨大无比的数据库&#xff0c;但是这个数据库没有一个像 SQL 语言可以直接获取里面的数据&#xff0c;因为更多时候 Web 是供肉眼阅读和操作的。如果要让机器在 Web 取得数据&#xff0c;那往往就是我们所说的“爬虫”了。现在项目需要&#xff0c;所以研究…

爬虫JS逆向思路 --(几千块钱都学不到的思路)

网络上几千块都学不到的JS逆向思路这里全都有&#x1f44f;&#x1f3fb;&#x1f44f;&#x1f3fb;&#x1f44f;&#x1f3fb; 本系列持续更新中&#xff0c;三连关注不迷路&#x1f44c;&#x1f3fb; 干货满满不看后悔&#x1f44d;&#x1f44d;&#x1f44d; &…

手把手操作JS逆向爬虫入门(一)

本文爬取的网站如下&#xff08;可以找解密工具解码&#xff09; aHR0cHM6Ly9uZXdyYW5rLmNuLw 爬取的内容为网站的资讯情报版块的新闻资讯 鼠标点击翻页&#xff0c;在开发者工具中查看请求包&#xff0c;很容看出请求地址和参数&#xff0c; 其中post请求的参数如图&#x…

JS实现图片爬虫

最近在在学node.JS&#xff0c;尝试着跟着网上的教程学着写一个JS爬虫,来爬取网上的图片文件&#xff0c;在此记录过程 获取网站的html结构 首先我们引入node.js的http核心模块&#xff0c;初始化并将目标网站地址作为url参数&#xff0c;接受一个回调函数&#xff0c;在这个…

从零开始学JS爬虫,轻松抓取网页数据!

随着互联网的发展&#xff0c;网页已经成为人们获取信息的重要途径之一。而如何高效地获取所需信息&#xff0c;就成为了很多人关注的问题。本文将介绍JS爬虫入门&#xff0c;帮助读者从零开始抓取网页数据。 一、概述 在介绍JS爬虫之前&#xff0c;我们先来了解一下爬虫的基…

爬虫之JS的解析

JS的解析 学习目标&#xff1a; 了解 定位js的方法了解 添加断点观察js的执行过程的方法应用 js2py获取js的方法 1 确定js的位置 对于前面人人网的案例&#xff0c;我们知道了url地址中有部分参数&#xff0c;但是参数是如何生成的呢&#xff1f; 毫无疑问&#xff0c;参数肯…

JavaScript爬取网页并分析

JavaScript爬取网页并分析 任务分析 爬取三个网站下的新闻数据&#xff0c;这里选择网易新闻网&#xff08;https&#xff1a;//news.163.com/&#xff09;&#xff1b;提取每条新闻的如下字段&#xff1a;标题&#xff0c;内容&#xff0c;发表日期&#xff0c;网址&#xf…

js - 爬虫的实现

爬虫的原理 爬虫&#xff0c;就是一个自动爬取网页上展示的信息的工具。我们要写一款爬虫&#xff0c;就要满足下面的条件&#xff1a; 网络的请求。首先我们要进行网络请求&#xff0c;让目标给我们返回信息&#xff08;常用的模块有http、http2、https、request、axios、pu…

Node.js实现简单爬虫 讲解

一、什么是爬虫 网络爬虫(又称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者)&#xff0c;是一种按照一定规则&#xff0c;自动的抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕…

爬虫攻略(一)

互联网 Web 就是一个巨大无比的数据库&#xff0c;但是这个数据库没有一个像 SQL 语言可以直接获取里面的数据&#xff0c;因为更多时候 Web 是供肉眼阅读和操作的。如果要让机器在 Web 取得数据&#xff0c;那往往就是我们所说的“爬虫”了。现在项目需要&#xff0c;所以研究…

javascript爬虫

用js爬虫&#xff0c;使用到nodejs 例子中爬取的是中国新闻网时政频道的最新10条新闻的title和链接 事先准备&#xff1a; 1、先去node官网下载安装一下 2、推荐vs code&#xff0c;需要通过终端下载插件&#xff0c;不想的话用cmd小黑框做终端&#xff0c;记事本写代码也行…

用js写个爬虫

如何用js完成爬虫项目 前言一、node.js的安装二、mysql的安装三、确定爬取网页四、查看分析网页源码五、开始写爬虫npmNode调用mysql定义要访问的网站定义新闻页面里具体的元素的读取方式定义哪些url可以作为新闻页面构造一个模仿浏览器的request读取种子页面解析出种子页面里所…

Docker—容器数据卷

目录 1.什么是容器数据卷 2.数据卷的使用 3.实战MySQL同步数据 4.卷 常用命令 5.匿名挂载与具名挂载 5.1 匿名挂载 5.2 具名挂载 6.数据卷容器 1.什么是容器数据卷 Docker将运用与运行的环境打包形成容器运行&#xff0c; Docker容器产生的数据&#xff0c;如果不通过d…

docker删除已停止的容器

一、docker删除已停止的容器 1、根据容器的状态&#xff0c;删除Exited状态的容器 先停止容器、再删除镜像中的容器、最后删除none的镜像。执行命令如下&#xff1a; docker stop $(docker ps -a | grep "Exited" | awk {print $1 }) #停止容器 docker rm $(docke…

Docker与容器的区别

容器 虚拟机和容器结构主要区别在于中间两层&#xff0c;虚拟机自带了操作系统&#xff0c;这个操作系统可以和宿主机一样&#xff0c;也可以不一样&#xff0c;而容器是和宿主机共享一个操作系统。我们知道&#xff0c;操作系统的内容是很多的&#xff0c;就像我们自己电脑上的…

docker 删除 容器/镜像 方法

docker的删除有两种&#xff0c;一个是rm 删除容器&#xff0c;一个是rmi删除镜像 想要删除运行过的images(镜像) 必须首先删除它的container(容器) 首先查看并找到要删除的镜像 docker images 这里我们要删除hello-world镜像 使用rmi 加 镜像id docker rmi fce289e99eb9 报…