節点削り元気にしたJS +チェリオ


あなたが私のようなウェブ・スクラリングに新しいならば、可能性はあります、あなたはすでに特定のウェブサイトによって妨げられているか、captchasをバイパスすることができないのを経験しました.
私がブロックされることについて心配することなくウェブページを傷つける簡単な方法を捜して、私は遭遇しましたProxyCrawl クローラーAPIを使用して簡単に提供しています.製品はスムーズに信頼性の高いアマゾンのページをscrapeすることができました.
この記事では、私はどのようにスクレーパーを構築し、私のプロジェクトにクロールAPIを統合する手順を共有したい.この単純なコードは簡単にアマゾンのURLのリストから製品レビューをscrapeし、そのスクラップされたデータをCSVファイルにストレートに書きます.

準備


このノードプロジェクトでは、Proxycrawlのライブラリと、Webスクレーピングで使用されるサーバー用のJQueryツールのようなCherioを使用しました.したがって、実際のコーディングを開始する前に、この作業に必要なすべてをリストします.
  • 私はいくつかの例を提供しているので、URLのリストが必要ですhere .
  • エーProxyCrawl account . 彼らはあなたの最初の1000の要求のための無料のAPIを呼び出すために使用できる無料試用品を持っているので、これは我々のプロジェクトに最適です.
  • The Nodejs library からの

  • Node Cheerio Library ギタブから
  • 本当に、それです.それで、更なるADOなしで、コードを書き始めましょう.

    ノードコーディング


    この時点で、お好みのコードエディターをインストールしているかもしれませんが、そうでない場合は、Visual Studioのコードをインストールすることをお勧めします.
    プロジェクトの構成を設定するには、次の手順を実行します.
  • プロジェクトフォルダ名を作成
  • フォルダの中に、ファイルを作成し、それをスクレーパーの名前.js
  • 完了したら、端末に行き、次の要件をインストールします.
  • 私はproxycrawl
  • NPM iチェリオ
  • パッケージのインストールの後、あなたのAmazonフォルダに移動して、後で私たちのコードによってこすりれるアマゾンURLのリストを含んでいるテキストファイルをペーストしてください.
    プロジェクトの構造は次のようになります.

    すべてが設定されているので、スクレーパーにコードを書き始めましょう.jsファイル.以下の行はAmazon製品をロードします.txtファイルを配列にします
    const fs = require('fs');
    const file = fs.readFileSync('Amazon-products.txt');
    const urls = file.toString().split('\n');
    
    次に、proxycrawlノードライブラリを利用し、クローズAPIをプロジェクトに簡単に統合できます.
    const { ProxyCrawlAPI } = require('proxycrawl');
    
    以下のコードは、我々のトークンを置くことができる労働者を作ります.ちょうどあなたのproxycrawlアカウントから通常のトークンで値を交換してください.
    const api = new ProxyCrawlAPI({ token: '_YOUR_TOKEN_' });
    
    その後、我々は現在、APIに各秒10リクエストを行うコードを書くことができます.また、setInterval関数を使用してテキストファイル内のURLをクロールします.
    const requestsPerSecond = 10;
    var currentIndex = 0;
    setInterval(() => {
      for (let i = 0; i < requestsPerSecond; i++) {
        api.get(urls[currentIndex]);
        currentIndex++;
      }
    }, 1000);
    
    この時点で、我々はちょうどURLをロードしている.実際の掻き取りを行うには、ノードチェリオライブラリを使用し、Webページの完全なHTMLコードからレビューを抽出します.
    const cheerio = require('cheerio');
    
    コードの次の部分は、返されたHTMLを解析する関数です.
    function parseHtml(html) {
      // Load the html in cheerio
      const $ = cheerio.load(html);
      // Load the reviews
      const reviews = $('.review');
      reviews.each((i, review) => {
      // Find the text children
      const textReview = $(review).find('.review-text').text().replace(/\s\s+/g, '')
    ;
        console.log(textReview);
      })
    }
    
    このコードは使用可能ですが、コンソールで結果をログ出力します.前に行って、代わりにCSVファイルにこれを書くために数行を挿入しましょう.
    そのためには、ノードとともにFSモジュールを使用し、WriteStreamという変数を作成します.
    const fs = require('fs');
    const writeStream = fs.createWriteStream('Reviews.csv');
    
    *レビューを覚えています.CSVファイルはあなたのCSVファイルであり、あなたが望むものは何でも名前を付けることができます.
    ヘッダを追加します.
    writeStream.write(`ProductReview \n \n`);
    
    最後に、私たちのコードを私たちのCSVファイルに実際の値を書き込むように指示する必要があります.
    writeStream.write(`${textReview} \n \n`);
    
    スクレーパーが完成したので、完全なコードは次のようになります.
    const fs = require('fs');
    const { ProxyCrawlAPI } = require('proxycrawl');
    const cheerio = require('cheerio');
    const writeStream = fs.createWriteStream('Reviews.csv');
    
    //headers
    writeStream.write(`ProductReview \n \n`);
    
    const file = fs.readFileSync('Amazon-products.txt');
    const urls = file.toString().split('\n');
    const api = new ProxyCrawlAPI({ token: '_YOUR_TOKEN_' });
    
    function parseHtml(html) {
      // Load the html in cheerio
      const $ = cheerio.load(html);
      // Load the reviews
      const reviews = $('.review');
      reviews.each((i, review) => {
        // Find the text children
        const textReview = $(review).find('.review-text').text().replace(/\s\s+/g, '');
        console.log(textReview);
        // write the reviews in the csv file
        writeStream.write(`${textReview} \n \n`);
      })
    }
    
    const requestsPerSecond = 10;
    var currentIndex = 0;
    setInterval(() => {
      for (let i = 0; i < requestsPerSecond; i++) {
        api.get(urls[currentIndex]).then(response => {
          // Make sure the response is success
          if (response.statusCode === 200 && response.originalStatus === 200) {
            parseHtml(response.body);
          } else {
            console.log('Failed: ', response.statusCode, response.originalStatus);
          }
        });
        currentIndex++;
      }
    }, 1000);
    

    結果


    あなたのスクレーパーを実行するには、単にWindows上でF 5キーを押すか、または端末に入力し、ノードのファイル名
    出力例

    あなたがこのガイドから何かを学んだことを願っています.ちょっとサインアップしてくださいProxyCrawl あなたのトークンを取得し、ブロックを避けるためにAPIを使用します.
    あなたが好きなように、このコードを利用してください😊