天のノードjsの爬虫類編15行コード爬取京東資源

4373 ワード

まさか爬虫類はpythonでしかできないのですか?いいえ、私たちの天のNode.jsもできます!
  • 必要なパッケージ
  • Node.jsの最新バージョンダウンロードアドレスNode.js公式サイト
  • npm包管理器下载下载最新的官方版本Node.js会带有npm
  • npmのサードパーティ製パッケージpuppeteerは、対応するjsファイル内でコマンドラインツールnpm i puppeteer -Dを実行する
  • である.

    爬虫類は、保護メカニズムのあるWebページを取得すると失効する可能性があります.
    初入江湖-自在の境編
    const puppeteer = require('puppeteer'); //        
    (async () => {   //  async       
        const browser = await puppeteer.launch();  //       
        const page = await browser.newPage();   //        
        await page.goto('https://www.jd.com/');  //     'url'    
        const result = await page.evaluate(() => {   //  result         src  
            let arr = []; //                
            const imgs = document.querySelectorAll('img');
            imgs.forEach(function (item) {
                arr.push(item.src)
            })
            return arr 
        });
        await browser.close()
    })()
    
                   ` node     `              
    
    

    このpuppeteerのパッケージは、実は私たちのために別のブラウザを開き、Webページを再開し、データを取得します.
    スマート入世-逍遥天境編
  • の上には京東のトップページの画像の内容しか登っていません.もし私の需要がさらに拡大したら、京東のトップページの中のラベルに するジャンプページのすべてのtitleの を、 に1つの に します。をすべて登る必要があります.
  • 私たちのasync関数は全部で5つのステップに分かれています.puppeteer.launch()browser.newPage()browser.close()だけが固定的な書き方です.
  • page.gotoは、どのページに行ってデータを取得するかを指定し、内部urlアドレスを交換したり、この方法を複数回呼び出すことができます.
  • page.evaluateこの関数は、内部では、Webページにアクセスしたいデータロジック
  • を処理します.
  • page.gotopage.evaluateの2つの方法は、asyncの内部で複数回呼び出すことができ、それは私たちが先に京東のホームページに入って、論理を処理した後、再びpage.gotoという関数を呼び出すことができることを意味し、
  • 上のすべてのロジックは、puppeteerというパッケージで、見えない場所で別のブラウザを開き、ロジックを処理するので、最終的にはbrowser.close()メソッドを呼び出してそのブラウザを閉じます.
  • このとき、前のコードを最適化し、対応するリソースを抽出します.
  •  const puppeteer = require('puppeteer');
    (async () => {
        const browser = await puppeteer.launch();
        const page = await browser.newPage();
        await page.goto('https://www.jd.com/');
        const hrefArr = await page.evaluate(() => {
            let arr = [];
            const aNodes = document.querySelectorAll('.cate_menu_lk');
            aNodes.forEach(function (item) {
                arr.push(item.href)
            })
            return arr
        });
        let arr = [];
        for (let i = 0; i < hrefArr.length; i++) {
            const url = hrefArr[i];
            console.log(url) //       
            await page.goto(url);
            const result = await page.evaluate(() => { //      console.log   
                
                  return  $('title').text();  //       title    
            });
            arr.push(result)  //              
        }
        console.log(arr)  //             Node.js  fs        
        await browser.close()
    })()
    
    

    天井があるevaluate関数内部のconsole.logは印刷できないし、内部で外部の変数を取得できないのでreturnだけが戻る.使用するセレクタはまず対応するインタフェースのコンソールに行ってDOMを選択してから使用できるかどうかを実験しなければならない.例えば、京東はquerySelectorを使用できない.ここでは京東のインタフェースにjQueryが使われているので、jQueryを使ってもいいです.とにかく彼らは使えるセレクタを開発して、私たちは使ってもいいです.そうしないとできません.
    威震武林-神遊玄境編
    データはこの時代に非常に貴重で、上の2つはいくつかの指定された特定の資源を取得することができて、ホームページの設計ロジックに従って、特定のhrefのアドレスを選択して、先に直接対応する資源を取得することができて、また再びpage.gotoの方法を使って入ることができて、更にpage.evaluate()の処理ロジックを呼び出すことができます.ここではあまり紹介しません.結局Node.jsは天に昇ることができて、未来は本当に何でもできるかもしれません.このような良質で短いチュートリアルは、お友達にコレクションしたり転送したりしてください.ありがとうございます.
    転載先:https://juejin.im/post/5c94d9f7e51d4535713ae44c