nodeJS爬虫


目录
  • 思路
  • 代码
  • 途中遇到的问题
  • 结果
  • 优化

思路

我选取的网址是电影天堂。

  • 下载需要用到的包 axios iconv-lite
  • 进行网络请求,拿到数据
  • 使用正则表达式解析数据,分离出我们需要的信息
  • 将有用信息写入本地文件

代码

const axios = require("axios");
const fs = require("fs");
const iconv = require("iconv-lite");

async function movie(){
  let result = await axios({
    method: 'get',
    url: 'https://dy.dytt8.net/html/gndy/jddy/20160320/50523.html',
    responseType: 'arraybuffer'
  }).then(result => result.data);

  // 重新编码
  result = iconv.decode(Buffer.from(result), 'gb2312');
  // result = iconv.encode(buf, 'utf8').toString();
  // let infoList = result.match(//g);
  // 正则表达式匹配
  let infoList = result.match(//g);
  // console.log(infoList.slice(200, 300));
  for(let i = 0; i < infoList.length; i++){
    // 去除标签
    infoList[i] = infoList[i].replace(/<.*?>/g, "");
  }
  // 写入文件
  let ws = fs.createWriteStream('IMDB评分8分左右影片.txt');
  await ws.write(infoList.join('\n'));
  ws.end();
  console.log("文件写入完毕。");
}
// 调用
movie()

途中遇到的问题

起初,我没有进行重新编码,于是我请求到的数据是乱码:

后来我读取首部信息,发现编码方式是gb2312,于是下载了iconv-lite来解码。

结果

大概获取了五百多部影片链接。

优化

  • 可以引入别的包将数据制作成表格
  • 匹配一些额外信息