ノードクローラー:csdnブログをクロールし、マークダウンファイルとして保存します

要求する

最近、ブログhttps://lvan-zhang.github.ioを開始したので、csdnの記事をプルするつもりで、手動で試しました。

  • 各記事の編集ボタンをクリックします
  • 記事のソーステキスト(マークダウン)をコピーして、ブログのマークダウンファイルにコピーします。
  • そして、新しいファイルの先頭で、形式に従ってタイトル、日付などに注釈を付けます

これらの操作がすべて手動で行われると、使い果たされるので、自動化を実現するためのコードを書く準備ができています。Pythonの方がクロールに便利ですが、この言語にあまり詳しくないので、母国語のjavascriptを選択しました。 。全体!

ライブラリの選択

  1. Express
    はビープ音をあまり鳴らしません。これは、ノードで最も一般的に使用されるフレームワークであり、httpリクエストを簡素化します。よりトレンディな場合は、Koaを使用することもできます。
  2. Cheerio
    はjqueryのように操作して、Webコンテンツを分析できます。クローラーはあなたの人生にこのライブラリを必要としませんか?
  3. スーパーエージェント
    は、Webページを開いてページ情報を取得することをシミュレートします。
    superagent-charsetはこのモジュールの拡張です。superagentはUTF-8のみをサポートするため、このライブラリでエンコードを指定でき、superagentを使用して文字化けしたコードをクロールするときに使用できます。

ライブラリを使用したくない場合は、ネイティブhttpモジュールであり、ファイルストリームを解析する必要がありますが、これは少し面倒です。httpリクエストに関する他のライブラリには、リクエスト、axios(サーバー)、got(軽量)が含まれます。

  1. チョーク
    は印刷されたテキストを美しくします、オプション
  2. log4js
    ログモジュール、その他のデバッグモジュール
  3. sequelizeまたはmongoose
    データベースの場合、mysqlおよびsqlliteでsequelizeを使用することをお勧めします。mongodbの場合は、mongooseを使用することをお勧めします。
  4. puppeteer
    ヘッドレスブラウザ。ページのソースコードに直接存在する代わりに、jsによってレンダリングされるいくつかの情報を取得できます。たとえば、スパページでは、ページのコンテンツは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.リッスンするポートを覚えていて、それを開く
にはアリババクラウドの背景。5。サーバーでnpm install
、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