node.js爬虫获取新闻TOP10

本文介绍如何利用Node.js爬虫从本地新闻网站获取Top10新闻,通过分析网页请求找到数据源,创建数据库和表,最终将爬取的数据存储到MySQL中,为后续的数据展示和处理奠定了基础。
摘要由CSDN通过智能技术生成


node.js爬虫获取新闻TOP10

前言

随着各种APP和网页的使用的增多,我们查看资讯就需要打开各个APP进行查看,耗时且耗费我们很多精力。很多时候我们想要把数据收集起来,放在自己的系统中进行统一展示输出。数据收集的方法由手工记录,剪贴报,截图,手工复制粘贴等传统方法,这里我们尝试使用 node.js 来对信息进行采集处理成我们需要的格式供我们使用。

确定信息源

每个人按照自己的需要来挑选信息源,这里以本地服务器部署的新闻网站(http://localhost/hotnews)为例。收集到数据后我们可以做很多很酷的事,譬如每天早上通过微信或邮箱推送我们感兴趣的信息。先通过浏览器打开网页查看页面,找出我们感兴趣的信息,这里以总排行的点击量排行为例。

分析数据来源

  1. 通过在浏览器按下F12打开开发者工具,切换到Network网络tab面板,然后刷新页面,可以看到这个页面的所有网络请求。

新闻排行页面网络请求清单

  1. 点击网络请求后查看Response,探索哪个请求的数据是我们感兴趣的。经过查看发现 GetTopDataList.php 这个请求是我们感兴趣的,这个本地部署的新闻应用是用 php 搭建的。

格式化后的请求返回体

  1. 点击 Response 面板左下角的花括号 {} 把返回体进行格式化,这时我们可以看到数据更加易读,进一步方便我们分析数据。

分析结构化数据

把Response 数据复制出来,我们具体分析一下

var all_1_data01 = {
   
    "conf": {
   
        "js_var": "all_1_data01"
    },
    "data": [{
   
        "id": "6744594",
        "title": "最新消息,我是新闻标题",
        "media": "宇宙最强媒体",
        "author": "记者张三",
        "url": "https:\/\/localhost\/w\/2023-03-09\/news10086999.php",
        "create_date": "2023-03-09",
        "create_time": "07:32:01",
        "cat_name": "www_www_all_suda_suda",
        "top_time": "20230309",
        "top_num": "37,245",
        "ext4": "mykfkcf3254354",  
        "time": "Thu, 09 Mar 2023 07:32:01 +0800"
    }],
}

response返回的是一段 js 代码,该代码声明了一个 all_1_data01 对象,对象里面的 data 属性就是我们需要的数据,它是一个包含了排行数据的数组列表,列表里面的每项都是一条新闻数据。我们对数据进行清洗,去除空数据,无效数据和不感兴趣的数据,得到最终存表的结构。

{
   
   "id": "6744594",
    "title": "最新消息,我是新闻标题",
    "url": "https:\/\/localhost\/w\/2023-03-09\/news10086999.php",
    "create_date": "2023-03-09",
    "create_time": "07:32:01",
    "top_num": "37,245",
    "time": "Thu, 09 Mar 2023 07:32:01 +0800"
}

新建爬虫项目

创建项目目录,并安装依赖

$ mkdir node-spider
$ cd node-spider
$ npm init -y
$ npm i axios cheerio promise-mysql -S

新建项目目录和文件,/db/index.js, /db/topNewsDao.js, /index.js

node-spider
|__db
|  |__index.js
|  |__topNewsDao.js
|__index.js

各文件代码清单

/*
 * /db/index.js
 * 封装了连接数据库,执行sql查询的方法
 */
const mysql = require('promise-mysql')

const config = {
   
  connectionLimit: 100,
  host: 'localhost',
  port: 3306,
  user: 'root',
  password: '123456', // 此处替换为你的mysql密码
  database: 'spider',
}

let pool = null

const getPool = async () => {
   
  if (!pool) {
   
    pool = await mysql.createPool(config)
  }
}

class DB {
   
  /**
   * 执行sql查询数据库
   * @param {String} sql sql语句
   * @param {String} isSql 是否是sql语句
   */
  static async query(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值