暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

node + crawler 实现爬虫

晓组智 2021-03-16
1592

基于node.js + crawler 包实现爬虫技术


背景知识:

crawler中文文档

https://node-crawler.readthedocs.io/zh_CN/latest/

开源demo:

https://gitee.com/zhui_i/reptile_store.git


案例:

main.js 核心文件,用于将 DB 及 retile 文件 整合一起 启动

    var DB = require('../DB/mode')
    const { getData } = require('./retile')
    getData().then((resp) => {
    insertData(resp.data)
    })
    /**
    * DB model
    */
    function insertData(data) {
    // console.log('getData', data.Data)
    let datas = data.Data
    // 通过 DB.getConnection 获得链接
    DB.getConnection(function (err, connection) {
    if (err) {
    console.error(err)
    return
    }
    let post = []
    for (let i in datas) {
    datas[i].forEach((d) => {
    let dArr = []
    for (j in d) {
    dArr.push(d[j])
    }
    post.push(dArr)
    })
    }
    console.log('post', post)
    var query = connection.query(
    'INSERT INTO newsType VALUES ?',
    [post],
    function (err, result) {
    // Neat!
    if (err) console.debug('inserted-err', err)
    else console.debug('inserted-result', result)
    connection.release() // 释放该链接,把该链接放回池里供其他人使用
    }
    )
    DB.end(function (err) {
    // all connections in the DB cluster have ended
    console.log('结束链接')
    })
    })
    }



    retile.js 用来 执行爬虫 并将 数据 存储至内存;

      var axios = require('axios')
      var fs = require('fs')
      var cheerio = require('cheerio')
      var request = require('request')
      axios.defaults.headers = {
      accept: '*/*',
      'accept-encoding': 'gzip, deflate, br',
      'accept-language': 'zh-CN,zh;q=0.9',
      channelid: '28',
      'x-channel': '28',
      'x-channel-type': '1',
      }
      const getData = () =>
      axios.get('https://www.tophub.fun:8888/GetAllType', {
      params: {
      page: 1,
      size: 10,
      sort: 'create_time;',
      },
      })
      module.exports = {
      getData: getData,
      }


      DB.js 数据库 读写文件

        const mysql = require('mysql') // mysql node driver
        const mysqlConfig = require('./config')
        // 初始化数据库配置, mysql端口号默认为3306
        const pool = mysql.createPool({
        connectionLimit: 10, // 连接数量
        host: mysqlConfig.host,
        user: mysqlConfig.user,
        password: mysqlConfig.password,
        database: mysqlConfig.database,
        })
        module.exports = pool
          module.exports = {
          host: 'localhost',
          user: 'root',
          password: 'WANG1996',
          database: 'reptileDB',
          port: 3306,
          }


          文章转载自晓组智,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论