node.js爬取数据(实操)

1.准备工作

前提是安装过node
准备一个文件夹, 比如:“drag-data”
依次安装依赖 npm install https request cheerio --save
在文件夹drag-data下创建data和image两个文件,用来存储抓取的数据
(抓取豆瓣电影url=“https://movie.douban.com/subject/1291843/?from=subject-page”)

2. 编写启动js文件

在drag-data文件下创建index.js文件

// 引入和定义初始变量
let http = require('https')
let fs = require('fs') // 文件读写
let request = require('request') // 发送request请求
let cheerio = require('cheerio') // jquery写法-获得所欲页面dom元素
let url = 'https://movie.douban.com/subject/1291843/?from=subject-page'
let i = 0
function fetchPage (x) {
  startRequest(x)
}
// 开始函数
function startRequest (x) {
  // 用http模块向服务器发起get请求
  http.get(x, function(res) {
    // 存储请求网页的整个html内容
    let html = ''
    res.setEncoding('utf-8') // 防止中文乱码
    // 监听data事件,每次取一块数据
    res.on('data', function (chunk) {
      html += chunk
    })
    // console.info(html)
    // 监听end事件,如果整个页面的内容获取完毕,执行回调函数
    res.on('end', function () {
      let $ = cheerio.load(html) // 用cheerio模块解释html
      let news_item = {
        // 电影标题
        title: $('.related-info h2 i').text().trim(),
        // i是用来判断获取页数
        i: i = i + 1
      }
      console.info(news_item) // 新闻信息打印
      let news_title = $('.related-info h2 i').text().trim()
      saveContent($, news_title) // 存储每篇文章内容及标题
      saveImg($, news_title) // 存储每篇文章图片及标题

      // 下一篇电影的url
      nextlink = $('.recommendations-bd dl:last-child dd a').attr('href')
      if (i <= 10) {
        fetchPage(nextlink)
      }
    }).on('error', function (err) {
      console.info(err)
    })
  })
}
// 存储标题函数
function saveContent ($, news_title) {
  $('#link-report span').each(function (index, item) {
    let x = $(this).text()
    x = x + '\n'
    // 将新闻文本内容一段一段添加到/data文件夹下,并用新闻标题命名文件
    // fs.appendFile('./data/' + news_title + '.txt', x, 'utf-8', function(err) {
    //   if (err) {
    //     console.info(err)
    //   }
    // })
    fs.writeFile('./data/' + news_title + '.html', x, 'utf-8', function(err) {
      if (err) {
        console.info(err)
      }
    })
  })
}
// 在本地存储爬取得图片资源
function saveImg ($, news_title) {
  $('#mainpic img').each(function (index, item) {
    // 图片标题
    let img_title = $('#content h1 span').text().trim()
    if (img_title.length > 35 || img_title === '') {
      img_title = 'Null' // 图片标题过长
    }
    let img_filename = img_title + '.jpg'
    let img_src = $(this).attr('src') // 获取图片url
    // 用request模块,想服务器发请求,获取图片资源
    request.head(img_src, function (err, res, body) {
      if (err) {
        console.info(err)
      }
    })
    request(img_src).pipe(fs.createWriteStream('./image/' + news_title + '---' + img_filename))
  })
}
fetchPage(url)
3. 启动js文件

在git中执行 node index.js
结果如下图
drag-data

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 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、付费专栏及课程。

余额充值