思路

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

  • 下载需要用到的包 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(/<p.*a.*>/g);
  // 正则表达式匹配
  let infoList = result.match(/<p.*(br|a|(\.&nbsp;.*))+.*>/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()

途中遇到的问题

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

image-20210826162700003

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

image-20210826162843064

结果

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

image-20210826163041700

优化

  • 可以引入别的包将数据制作成表格
  • 匹配一些额外信息
 posted on 2021-08-26 16:39  _STITCH  阅读(97)  评论(0编辑  收藏  举报