要求する
最近、ブログhttps://lvan-zhang.github.ioを開始したので、csdnの記事をプルするつもりで、手動で試しました。
- 各記事の編集ボタンをクリックします
- 記事のソーステキスト(マークダウン)をコピーして、ブログのマークダウンファイルにコピーします。
- そして、新しいファイルの先頭で、形式に従ってタイトル、日付などに注釈を付けます
これらの操作がすべて手動で行われると、使い果たされるので、自動化を実現するためのコードを書く準備ができています。Pythonの方がクロールに便利ですが、この言語にあまり詳しくないので、母国語のjavascriptを選択しました。 。全体!
ライブラリの選択
- Express
はビープ音をあまり鳴らしません。これは、ノードで最も一般的に使用されるフレームワークであり、httpリクエストを簡素化します。よりトレンディな場合は、Koaを使用することもできます。 - Cheerio
はjqueryのように操作して、Webコンテンツを分析できます。クローラーはあなたの人生にこのライブラリを必要としませんか? - スーパーエージェント
は、Webページを開いてページ情報を取得することをシミュレートします。
superagent-charsetはこのモジュールの拡張です。superagentはUTF-8のみをサポートするため、このライブラリでエンコードを指定でき、superagentを使用して文字化けしたコードをクロールするときに使用できます。
ライブラリを使用したくない場合は、ネイティブhttpモジュールであり、ファイルストリームを解析する必要がありますが、これは少し面倒です。httpリクエストに関する他のライブラリには、リクエスト、axios(サーバー)、got(軽量)が含まれます。
- チョーク
は印刷されたテキストを美しくします、オプション - log4js
ログモジュール、その他のデバッグモジュール - sequelizeまたはmongoose
データベースの場合、mysqlおよびsqlliteでsequelizeを使用することをお勧めします。mongodbの場合は、mongooseを使用することをお勧めします。 - puppeteer
ヘッドレスブラウザ。ページのソースコードに直接存在する代わりに、jsによってレンダリングされるいくつかの情報を取得できます。たとえば、スパページでは、ページのコンテンツはjsによってレンダリングされます。puppeteerを呼び出して、特定のタグがページに表示されたときに、ページのレンダリングされたhtmlを取得できます。 - async + eventproxy
は同時リクエストを制御します - 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号