node爬虫:爬取csdn博客并保存为 markdown 文件

需求

最近自己搞了个博客 https://lvan-zhang.github.io ,于是准备把 csdn 上的文章扒拉过来,手动简单的试了一下:

  • 点开每一个文章的编辑按钮
  • 复制文章的源文字(markdown),复制到自己博客的 markdown 文件中。
  • 并在新的文件开头按照格式注上标题、日期等等

这些操作全部手动来做的话那是要累死个羊的,于是准备写点代码实现自动化,虽说 python 用来做爬虫比较方便,奈何对这门语言不是很熟悉,于是挑选我们的本命语言 javascript 来整 !

库的选择

  1. express
    不多哔哔,node 最常用的框架,简化 http 请求,如果你比较潮的话也可以用 Koa
  2. cheerio
    可以像 jquery 一样操作,用来分析网页内容,爬虫不用这个库你拿命爬?
  3. superagent
    模拟打开一个网页,获取页面信息。
    superagent-charset 是这个模块的拓展,因为 superagent 只支持 UTF-8,用了这个库可以指定编码,当你用 superagent 爬出乱码时可以使用它。

如果不想用库,那就是原生的 http 模块,需要解析文件流之类的,略微麻烦。其他关于 http 请求的库还有 request、axios(服务端)、got(轻量)

  1. chalk
    美化打印文字,可有可无
  2. log4js
    日志模块,其他的还有 debug 模块
  3. sequelize 或 mongoose
    数据库用 mysql 和 sqllite 之类的建议用 sequelize,如果是 mongodb,推荐 mongoose
  4. puppeteer
    无头浏览器。我们可以用来抓取一些通过 js 渲染而不是直接存在于页面源代码中的信息。比如 spa 页面,页面内容都是 js 渲染出来的。我们可以调用 puppeteer 在页面某个标签出现时获取到页面当时的渲染出来的 html。
  5. async + eventproxy
    控制并发请求
  6. node-xlsx
    fs 模块并不能直接写入 xlsx,所以用这个。

注:以上的库并不是全部用到了,可以给大家具体需求的一个参考~

源代码

https://github.com/lvan-zhang/crawl-blog

学到的

1、服务器没有域名的时候想要用 ip 访问需要关闭防火墙:

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

2、本地调用文件读写是写到本地,代码上传服务器后,文件读写就是服务器的目录
3、记得监听哪个端口,要在阿里云后台开启一下
4、node 的 node_modules 不要去手动上传,直接在服务器上 npm install
5、nginx 设置反向代理,访问 www.example.com 则其实访问的是 http://127.0.0.1:5050

server {
    listen 80;
    server_name www.example.com; # 改为第一步申请的域名

    location / {
        proxy_pass http://127.0.0.1:5050;
    }
}
server {
    listen 80;
    server_name game.cl8023.com;
    location / {
        proxy_set_header   Host      $http_host;
        proxy_pass         http://127.0.0.1:8023;
        proxy_redirect     off;
        proxy_set_header   X-Real-IP       $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen 80;
    server_name cl8023.com www.cl8023.com;
    # 解决刷新404的问题
    location /blog {
        try_files $uri $uri/ /index.html;
    }
    location / {
        proxy_set_header   Host      $http_host;
        proxy_pass         http://127.0.0.1:3000;
        proxy_redirect     off;
        proxy_set_header   X-Real-IP       $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

6、端口操作

# 查看进程端口
netstat -tpln
# 查看某个端口
netstat -tunlp|grep 3001
# 关闭进程,-9 表示强迫进程立即停止
kill -9 PID号

猜你喜欢

转载自blog.csdn.net/weixin_43972437/article/details/102385925