nodejs爬取豆瓣top250电影信息

本文讲述了作者在实验楼的Node.js训练营中,如何改进初始代码以爬取豆瓣电影Top250的全部信息。在爬取过程中遇到的顺序混乱问题,原因是Node.js的异步特性导致多个页面信息同时读取。通过理解异步执行和采用递归解决顺序问题。内容包括代码改进和正则判断、非异步执行以及多页面自动化读取的实现。
摘要由CSDN通过智能技术生成

事情起因

最近报了实验楼nodejs训练营,第一个任务是完成nodejs爬虫爬取豆瓣电影top250电影信息,但是它给出的代码只能实现对一张页面的爬取,而且是对本地服务器上的网页进行爬取信息,但是如果换成实际网页上这个程序就无法运行了,所以我又对代码进行了重新修改


遇到的大问题

在过程中遇到了两个大问题,由于需要对多页面进行信息爬取,所以我就打算先获取每个页面的url,然后把爬取一个页面信息的函数写好,传入这个页面的url到那个函数中进行信息爬取,将爬取的信息存入一个对象中,随后将这个对象推入另一个数组中

我按照这个逻辑写出了代码,运行也很顺利,但是查看运行输出文件的内容后发现了问题,电影的顺序和网页上电影的顺序不符,以一页网页为单位,电影的顺序乱了。

豆瓣Top250分为了10页,排序由前向后是1,2,3…,10页,但是我获取的电影信息却是按1,5,3…….2,7页排的。

一直想不通,纠结了好久,最后突然想到nodejs是异步的,写一个循环只是告诉这十个读取页面信息的函数开始运行,而不是像别的编程语言一样执行完读取第一页信息的函数后再执行下一个,在这里相当于是10个函数同时执行,由于在每个函数运行结束后才将读取的信息存入对象中,而每个函数执行的时间参差不齐,所以就导致对后的结果混乱。

必须要使用递归的写法才能保证其安循环的顺序执行,贴一个链接,我觉得讲的不错,后面有我我也会翻译一下


需要解决的问题

  • 对内容进行正则判断
  • 使部分程序非异步执行
  • 多页面自动化读取信息

源代码以及过程讲解

//爬取的内容为电影的名称以及其等级

'use strict';
    //用于对http的处理
const http = require('http'),
    //对文件进行操作
    fs = require('fs'),
    //对路径进行操作
    path = require('path'),
    //用于对页面进行类似于jquery的操作,需要npm安装
    cheerio = require('cheerio'),
    //用来对外发送请求,需要npm安装
    request = require('request&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值