Node.js爬取豆瓣Top250

先言

上课老师提议我们去用python等去做个爬虫,爬取下知乎的信息。权衡了一下,不想要再去费时间学python了,就拿Node来做了,顺便练一下Node。而在爬取的信息上,选择了爬取豆瓣的Top250排行,准备分析12个月份里高分电影的分布,虽然数据量可能不高,可是还是有些实际意义的。
Node爬虫的知识,先是在《Node.js包教不包会》上看了lesson3,虽然很短,不过看完了之后入门还是OK的,接下来就是自己来稍微深入学一下了。
总的来讲,爬虫就是依靠发起http请求,并将获取到的页面代码进行分析,取出自己想要的信息。通过Node来做的时候,有一些模块可以起到很便捷的作用:

  1. Express
    封装好的方法可以让我们很方便的搭建一个简易的服务器,不过这个并不必要,原生的Node也可以较快的做到;
  2. Superagent
    http请求及响应模块,还是十分好用的,虽然同样可以用原生Node来做到,不过还是不要重复造轮子嘛;
  3. Cheerio
    这个就特别重要了。当取到页面的html代码时,分析过程是很复杂的,可是这个模块允许我们使用JQuery的方式去分析,链式操作也很便捷,有种在操作前端的感觉。
  4. Eventproxy
    这个模块是做并发控制的。我做的过程中,也没有用到什么其他功能,只是作为一个异步完成的计数器而已。

主要也就是这几个模块,如果需要将读取到的数据存入到文件或者数据库的话,就要引入fs或者其他模块了,可是我也只是在页面上先展示了一下,尚未需要这些,后续准备用LayUi展示数据,顺便练下LayUi的各种图形UI,到时候再补上吧。

步骤

1. 引入模块

首先也就是各种模块的引入了,也没有什么问题:

var express=require('express');
var cheerio=require('cheerio');
var superagent=require('superagent');
var eventproxy=require('eventproxy');
	
var app=express();
var ep=eventproxy();

2. 全局变量

然后设立全局变量进行数据存储:

var moviePages=[];//存放电影页面url
var movieAs=[];//存放各个电影页面链接
var movieInfos=[];//存放各电影信息

3. 搭建服务器

首先搭建简易的服务器来展示获取的数据,直接调用express的一些方法,对3000端口进行get方法的响应:

app.get('/',function(req,res){
    
	//响应的执行代码
	……
});
//监听3000端口
app.listen(3000,()=>{
    
	console.log('Listening to port 3000……');
})

4. 存取页面url

电影页面的url,分析页面可以得知,250个数据,总共有十张页面,除去第一张页面的url为:
https://movie.douban.com/top250
其余页面的url满足:
https://movie.douban.com/top250?start=25*i&filter=
将所有页面url存入moviePages数组以待调用。
在Top250页面里面,我们能够获取到的数据太少,只有电影名以及简介,很多类似上映具体时间,主演等等信息要等点开之后的页面才能得到,所以要先将250个电影的链接分别获取并存取到movieAs里面,再进入各个页面进行信息的获取。

5. 获取页面

通过sugeragent获取到页面的代码:

for(var i=0;i<10;i++){
    
superagent.get(moviePages[i]).end(function(err,sres){
    
   if(err){
    
   	console.log('There is an error when asking for top250');
   }
//将获取到的页面代码赋给$,使你可以通过JQ来操作,decodeEntitle为了避免获取乱码
   var $=cheerio.load(sres.text,{
    decodeEntitle
要在 Node.js爬取图片,你可以使用各种库和模块来帮助你完成这个任务。以下是一种常见的做法: 1. 首先,你需要安装并引入 `axios` 库,这是一个非常流行的用于发送 HTTP 请求的库。你可以使用以下命令安装它: ``` npm install axios ``` 在代码中引入 `axios`: ```javascript const axios = require('axios'); ``` 2. 接下来,你需要确定要爬取图片的 URL 地址。可以通过发送 HTTP 请求并使用 `axios.get` 方法获取到图片的二进制数据。 ```javascript const imageUrl = 'https://example.com/image.jpg'; axios .get(imageUrl, { responseType: 'arraybuffer' }) .then((response) => { const imageData = Buffer.from(response.data, 'binary'); // 在这里做一些处理,比如将图片保存到本地或者进行其他操作 }) .catch((error) => { console.error('无法获取图片:', error); }); ``` 3. 一旦你获得了图片的二进制数据,你可以根据需要将其保存到本地文件或进行其他处理。以下是将图片保存到本地文件的示例代码: ```javascript const fs = require('fs'); // 保存文件的路径和名称 const savePath = './path/to/save/image.jpg'; fs.writeFile(savePath, imageData, (err) => { if (err) { console.error('无法保存图片:', err); } else { console.log('图片保存成功!'); } }); ``` 请确保你遵守网站的使用规则和法律法规,尊重他人的版权和隐私。在爬取图片之前,请确保你有合法的授权或许可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值