ブログ記事一覧ホームパークをクロール - NodeJSを持つWebクローラ小さなアプリケーションを実装します

序文

  Webクローラー(また、Webスパイダー、ウェブロボットとして知られ、FOAFコミュニティの途中で、より頻繁にウェブチェイサーと呼ばれる)、ワールド・ワイド・ウェブのプログラムやスクリプトで自動的にグラブ情報、フォロー一定のルールのようなものです。他のあまり頻繁に使用される名前はアリ、自動インデックス作成、シミュレーションプログラムやワームが含まれます。

  私たちは離れてから、データ分析や財務データ収集の財務分析に使用されるマイニングデータ収集に適用されると、含まサイトをクロールし、検索エンジンに適用されるよう、自動的に収集データ情報へのWebクローラを使用することができますだけでなく、様々な分野でウェブクローラに世論の監視と分析、および他のターゲットを適用することができ、顧客データを収集します。

1、ウェブクローラの分類

  構造および実装技術によるウェブクローラーシステムは、大きく次のタイプに分けることができる:一般クローラ(汎用ウェブクローラー)、クローラフォーカス(集束ウェブクローラー)、増分ウェブクローラ(増分ウェブクローラー)を、深いウェブ爬虫類(ディープWebクローラー)。実際のウェブクローラーシステムは、いくつかのクローラー技術を組み合わせることで、通常では、以下では、これらの爬虫類、いくつかの簡単なことです。

1.1一般的なウェブクローラ

ウェブ全体、メインの検索エンジンやポータルサイト大規模なWebサービスプロバイダのためのデータ収集に展開シードURLの一部からオブジェクトをクロールもクローラー(スケーラブルウェブクローラ)として知られているネットワーク全体、。

1.2、焦点を当てクローラ

また、選択的にウェブクローラの事前定義されたテーマに関連するページを持つものをクロールテーマクローラ(話題のクローラ)、として知られています。そして、一般的なWebクローラーがページのトピックに関連するクロールだけフォーカス爬虫類に比べ、高速更新の少数のためにも、ハードウェアおよびネットワークリソース、保存されたページとの大幅な節約が、特定の集団のための特定の領域の数を満たすことができます需要情報。

1.3インクリメンタルウェブクローラー

爬虫類ページの変更がダウンロードされたページで発生した、それはある程度を保証できるだけ増分更新を取って、新しく生成されたか、クロール手段は、ページが新しいページ可能限りクロールされます。

1.4ディープのWebクローラ

表面の存在によって、Webページには、ページ(表面ウェブ)と深いウェブ(も目に見えないWebページまたは非表示のWebとして知られている深層ウェブ、)に分けることができます。表面ページはインデックス静的なページのハイパーリンクにページがメインのWebページ構成に達することができ、従来の検索エンジンを指します。深層ウェブコンテンツのほとんどは、静的リンクによって得られた検索フォームに隠された、唯一のユーザーは、いくつかのキーワードで取得するWebページを送信することができないということです。

2、簡単なアプリケーションの爬虫類を作成します

  さらにいくつかの爬虫類の簡単なよりは理解した後、のは簡単な爬虫類小さなアプリケーションバーを実装してみましょう。

2.1目標

言及の爬虫類は、大きな可能性が順番に考えるビッグデータ、と思うのPython Pythonはもっとやる本当に爬虫類、以下、Baiduの。原因は主に、比較的、JavaScriptを話すと、より小さなシンプルな熟練、フロントエンド開発の独自の作品を行います。小さな目標を達成し、NodeJSが右に来るとブログガーデン(共通開発者向けサイトを所有して)ホーム記事のリストをクロールし、ローカルのJSONファイルに書き込みます

ビルドに2.2環境

  • NodeJS:NodeJSをインストールするには、コンピュータ、インストールされていないが、に行く公式サイトダウンロードしてインストールします。
  • NPM:NodeJSのパッケージ管理ツール、一緒にインストールNodeJSと。

NodeJSを使用することができるコマンドラインを開き、インストールしnode -v、インストールが成功したかどうかNodeJSを検出する、ことができるnpm -vNodeJSインストールが成功か否かを検出、インストールが正常に行われた(バージョンに応じて)次の情報を印刷する必要があります。

2.3、具体的な実装

2.3.1インストールの依存関係

ディレクトリで行われるnpm install superagent cheerio --save-devインストールたSuperAgentは、これらの2つの依存関係をチェリオ。作成crawler.jsファイルを。

  • たSuperAgentはたSuperAgentは軽量で、柔軟性、読みやすい、クライアントはNodeJS環境で、低学習曲線エージェントモジュールを要求します。

  • チェリオチェリオは速く、柔軟で無駄のjQueryのサーバ専用に設計されたコアを実現しています。これは、jQueryのような文字列として動作することができます。

// 导入依赖包
const http       = require("http");
const path       = require("path");
const url        = require("url");
const fs         = require("fs");
const superagent = require("superagent");
const cheerio    = require("cheerio");

2.3.2クロールデータ

そして、ページ要求を取得し、ページの内容を取得した後、DOMの解析値に戻るためには、あなたがデータを望むものに依存し、最終的には結果がローカルに保存されたJSON文字列に変換処理さ。

//爬取页面地址
const pageUrl="https://www.cnblogs.com/";

// 解码字符串
function unescapeString(str){
    if(!str){
        return ''
    }else{
        return unescape(str.replace(/&#x/g,'%u').replace(/;/g,''));
    }
}

// 抓取数据
function fetchData(){
    console.log('爬取数据时间节点:',new Date());
    superagent.get(pageUrl).end((error,response)=>{
        // 页面文档数据
        let content=response.text;
        if(content){
            console.log('获取数据成功');
        }
        // 定义一个空数组来接收数据
        let result=[];
        let $=cheerio.load(content);
        let postList=$("#main #post_list .post_item");
        postList.each((index,value)=>{
            let titleLnk=$(value).find('a.titlelnk');
            let itemFoot=$(value).find('.post_item_foot');

            let title=titleLnk.html(); //标题
            let href=titleLnk.attr('href'); //链接
            let author=itemFoot.find('a.lightblue').html(); //作者
            let headLogo=$(value).find('.post_item_summary a img').attr('src'); //头像
            let summary=$(value).find('.post_item_summary').text(); //简介
            let postedTime=itemFoot.text().split('发布于 ')[1].substr(0,16); //发布时间
            let readNum=itemFoot.text().split('阅读')[1]; //阅读量
            readNum=readNum.substr(1,readNum.length-1);

            title=unescapeString(title);
            href=unescapeString(href);
            author=unescapeString(author);
            headLogo=unescapeString(headLogo);
            summary=unescapeString(summary);
            postedTime=unescapeString(postedTime);
            readNum=unescapeString(readNum);

            result.push({
                index,
                title,
                href,
                author,
                headLogo,
                summary,
                postedTime,
                readNum
            });
        });

        // 数组转换为字符串
        result=JSON.stringify(result);

        // 写入本地cnblogs.json文件中
        fs.writeFile("cnblogs.json",result,"utf-8",(err)=>{
            // 监听错误,如正常输出,则打印null
            if(!err){
                console.log('写入数据成功');
            }
        });
    });
}

fetchData();

3、最適化が行われます

3.1、結果を生成します

プロジェクトディレクトリでコマンドライン入力を開きnode crawler.js

あなたは、ディレクトリが作成されることがわかりますcnblogs.json、次のように、ファイルをファイルを開きます。

オープンブログガーデンホームの比較は次のとおりです。

首尾よく家が欲しかった記事のリストに登りました

3.2、タイミングクロール

:次のようにデータを取得するための唯一のたびに、タイマーの価格は、自動的にコードたら、5分ごとにクロールすることであることがわかりました

···
// 每隔5分钟请求一次
setInterval(()=>{
    fetchData()
},5*60*1000);
···

4、要約

  Webクローラーアプリケーションは、はるかにそれよりも、単にウェブクローラは、簡単な紹介、および小さなデモの実施を行うために以上、不十分な場合は、私を修正してください。

参考文献:


https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/5162711
https://blog.csdn.net/zw0Pi8G5C1x/article/details/89078072
https://www.jianshu.com/p/1432e0f29abd
https://www.jianshu.com/p/843ade9bf6df

おすすめ

転載: www.cnblogs.com/peerless1029/p/11946652.html