Skip to content

一个node的爬虫程序,从各县区统计公报中,抓取2017年各县区常住人口总数

Notifications You must be signed in to change notification settings

SevenGuns/node-crawler

Repository files navigation

node-crawler

这里只用了cheerio,我是想把爬虫的一般流程抽象出来,以满足更多业务场景的需求。

适用场景

静态网页

特色功能

自动重试、自动存档、人工干预校准

快速启动

npm install
node index.js

目录介绍

.
├── README.md
├── data.json	// 存档分页数据 二维数组[pageIndex, dataIndex]
├── index.js	// node脚本
├── list.json	// 输出打印数据
└── package.json

主流程

主要职能:

  • 循环抓取数据
  • 进度初始化、自动保存进度
  • 异常处理
  • 人工干预校准
  • 打印输出结果

爬虫流程

处理业务

主要职能:

  • 防止网络波动,自动重试,封装请求函数
  • 数据分页爬取,使用二维数组存储
  • 校验匹配结果准确性

可能遇到的问题

node版本号问题

尽量用node高版本,低版本对es6语法支持不是很好。

我用的vscode,本地装了nvmdebug的时候会出现node版本号不对的情况,即使是切换了版本号也不行。

解决办法
  1. 切换nvm默认版本号nvm alias default 8.11.1,因为vscode执行终端使用的是默认版本。
  2. 添加 runtimeExecutable 到你的 .vscode/launch.json
{
    "version": "0.2.0",
    "configurations": [
        
        {
            "type": "node",
            "request": "launch",
            "name": "启动程序",
            "program": "${workspaceFolder}/index.js",
            "runtimeExecutable": "${env:HOME}/.nvm/versions/node/v8.11.1/bin/node" 
        }
    ]
}

心得体会

程序设计,先有鸡还是先有蛋?

很多人觉得要先把流程设计出来,再写代码。

其实我经常这样的,先撸,遇到问题再作调整,最后再把所有流程串起来。

  1. 出发点是理想状况,实施过程中肯定还会遇到很多问题,边做边调整会更好
  2. 经验不丰富,行动比想象更有效

用python会更好一些

一是框架更成熟,支持也更广泛;二是语法更适合

About

一个node的爬虫程序,从各县区统计公报中,抓取2017年各县区常住人口总数

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published