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

article/2025/10/11 2:26:56

思考🤔
假设你正在为公司做市场调研,你需要获得一些能够提供关于你的目标受众的信息以进行研究,但是你发现这些信息并不能直接获取。你人工地搜索每个网站是不现实的,所以你需要一种更高效、更自动化、更快速的方式来获取这些信息。在这种情况下,我们应该如何高效的获取这些信息呢?

在如上思考中,我们需要解决的问题是:如何高效、自动化、快速的获取信息。那这个问题的答案就是:爬虫。

什么是爬虫?

爬虫是一种自动化程序,它模拟客户端行为,并访问网站以解析数据和获取有用信息。
它们通过模拟浏览器或访问API等方式,访问网站并解析页面,从而收集有关其内容的信息。

爬虫的分类

通用爬虫:能够访问互联网上的所有网站并自动收集数据,大多数情况下不包括互联网上的所有网站,速度相对较慢。

聚焦爬虫:只会在特定的域名集合内执行爬取操作,通常速度较快。

增量式爬虫:可以检查网站页面更新并定期抓取新数据,只抓取新数据或者更新的数据,然后将这些数据追加到原有数据的后面。

深度网页爬虫:可以访问动态网站,模拟用户在网站上进行交互的行为,例如使用一个按钮或者通过一个下拉列表等与网站进行交互,解析网站返回的数据。

这4类类型的爬虫大致上又可以分为两类,就是通用爬虫和聚集爬虫,其中聚焦网络爬虫,增量式网络爬虫和深层网络爬虫可以通俗地归纳为一类,因为这类爬虫都是定向爬取数据。

相比于通用爬虫,这类爬虫比较有目的性,也就是网络上经常说的网络爬虫,而通用爬虫在网络上通常称为搜索引擎。

爬虫的应用

  1. 搜索引擎:搜索引擎使用爬虫来扫描互联网上的网页,并建立索引,以便用户可以通过关键字搜索找到相关信息。

  2. 数据挖掘和分析:爬虫可以用于抓取大量的数据,并进行进一步的处理和分析,以获取有关市场趋势、用户行为、舆情分析等方面的见解。

  3. 价格比较和竞争情报:许多电子商务网站使用爬虫来抓取竞争对手的产品信息和价格,以便做出相应的调整和决策。

  4. 新闻聚合和摘要:爬虫可以帮助收集各种新闻网站的文章,并将它们聚合在一个平台上,使用户可以方便地浏览和获取最新的新闻摘要。

  5. 社交媒体分析:爬虫可以用于抓取社交媒体平台上的数据,例如推特或Instagram上的帖子和评论,以进行用户情感分析、话题趋势等。

  6. 学术研究:研究人员可以使用爬虫来获取学术论文、期刊文章和其他研究材料,以便进行文献综述和数据分析。

请注意,在进行爬虫时,应遵守法律和道德规范,尊重网站的隐私政策和使用条款。确保在爬取信息之前获取合适的许可,并尊重网站的访问频率限制,以避免给服务器造成过大的负担。

爬虫基本流程

在这里插入图片描述

从0-1实现爬取豆瓣电影 Top 250

0 我们看一下豆瓣电影首页的内容以及对应的dom结构,是一个列表,包含电影图片,电影名,简介等
在这里插入图片描述
1 初始化项目,并且添加 cheerio 和 axios 依赖

// 初始化项目
npm init -y
// 安装cheerio依赖,用于解析dom, axios 用于请求接口
npm i cheerio axios

2 使用 axios 请求接口,获取数据

// index.js
import axios from './axios.js'
// 请求网页,获取数据
axios.get('https://movie.douban.com/top250').then(res => {console.log(res)
}).catch(e => console.log('error=', e))

此时看res打印的是什么
在这里插入图片描述
这里可以看到 res 是一个对象,其中网页的dom内容存储在 data 中,我们可以对data进行解析,获取想要的数据

3 使用 cheerio 解析数据

import axios from './axios.js'
import * as cheerio from 'cheerio'axios.get('https://movie.douban.com/top250').then(res => {// 使用 cheerio 将页面内容解析为 dom 树const $ = cheerio.load(res.data)// 电影列表包含在一个类名为 article 的盒子里面,其中每一个电影包含在 类名为 item 的盒子里面// 因此,获取信息的逻辑如下:const items = Array.from($('.article .item'))items.forEach( item => {const title = $($($(item).find('.title'))[0]).text()const pic = $(item).find('.pic a').attr('href')const quote = $(item).find('.quote').text()?.trim()console.log({title, pic, quote})})
}).catch(e => console.log('error=', e))

至此,我们获取到了电影的 title, pic, quote
在这里插入图片描述
4 那我们如何把获取的数据保存在本地呢

import fs from 'fs'function saveFile(fileName, content) {try {fs.writeFileSync(fileName, JSON.stringify(content))} catch(error) {console.error(error)}
}export default saveFile

然后把我们刚刚爬取到的数据保存在本地

import axios from './axios.js'
import * as cheerio from 'cheerio'
import save from './save.js';axios.get('https://movie.douban.com/top250').then(res => {// 使用 cheerio 将页面内容解析为 dom 树const $ = cheerio.load(res.data)// 电影列表包含在一个类名为 article 的盒子里面,其中每一个电影包含在 类名为 item 的盒子里面// 因此,获取信息的逻辑如下:const items = Array.from($('.article .item'))const movies = items.map( item => {const title = $($($(item).find('.title'))[0]).text()const pic = $(item).find('.pic a').attr('href')const quote = $(item).find('.quote').text()?.trim()return {title, pic, quote}})// 保存数据save('movies.json', movies)
}).catch(e => console.log('error=', e))

保存的数据如下:
在这里插入图片描述
这样,一个小小的爬虫demo就写好了,当然还有很多功能没有写,如下载图片文件而不是地址,爬取更多详细信息,翻页爬取等,大家有兴趣可以自己研究~~

反爬机制

随着爬虫技术的日渐成熟,各大网站的反爬机制也是与时俱进,大家相互促进式成长。

知道常见的反爬机制,不仅有助于保护自己,也可以爬取他人网站(此处应有🐶

常见的反爬机制如下:

  • 检查cookie、header等信息
  • 接口携带token等信息
  • 使用滑块、验证码等
  • 需要登录
  • 屏蔽高频调用接口的IP

写在最后

通过本文我们了解到,爬虫技术在互联网时代的数据获取和信息分析中扮演着重要的角色。

不同类型的爬虫有不同的应用场景,但是我们也需要注意爬虫技术的合法性和道德性,遵守相关法律法规和道德规范,保护个人隐私和知识产权。

同时,随着爬虫技术的不断发展和应用场景的不断拓展,各大网站的反爬机制也在不断升级,我们需要了解和应对这些反爬机制。

总之,爬虫技术的合理应用可以为我们带来更多的便利和机遇,但是我们也需要在合法合规的前提下使用它。


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

相关文章

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

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

js爬虫

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

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

网络上几千块都学不到的JS逆向思路这里全都有👏🏻👏🏻👏🏻 本系列持续更新中,三连关注不迷路👌🏻 干货满满不看后悔👍👍👍 &…

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

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

JS实现图片爬虫

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

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

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

爬虫之JS的解析

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

JavaScript爬取网页并分析

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

js - 爬虫的实现

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

Node.js实现简单爬虫 讲解

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

爬虫攻略(一)

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

javascript爬虫

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

用js写个爬虫

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

Docker—容器数据卷

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

docker删除已停止的容器

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

Docker与容器的区别

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

docker 删除 容器/镜像 方法

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

docker多容器操作与强制删除容器的方法步骤

简介: 这是一篇有关【doker的多容器操作和强制删除容器的方法】的文章,用最精简的语言去表达给前端读者们。 1、创建多个容器 在WIndows环境下我们来作这个,先打开三个PowerShell窗口,然后在每个窗口中输入创建容器的命令&#…

Docker删除镜像和容器

一、删除容器 首先需要停止所有的容器(只停止单个时把后面的变量改为image id即可) docker stop $(docker ps -a -q) 删除所有的容器(只删除单个时把后面的变量改为image id即可) docker rm $(docker ps -a -q) 二、删除镜像…

如何删除docker镜像与容器

目录 删除示例: 1.查看docker中要删除的镜像 2.删除镜像,使用命令“docker rmi image id” 3.查看docker中正在运行的容器 4.停止容器 5.删除容器 6.查看容器 7.删除镜像 8.最后查看所有镜像 删除示例: 1.查看docker中要删除的镜像 …