Node.jsとPuppeteerを使用したWebスクレイピング

Webスクレイピングの簡単な入門チュートリアル

Webスクレイピングは、Webページをダウンロードし、そこから何らかの情報を抽出するタスクです。

私は最近、LCDディスプレイが取り付けられたArduinoボードを使って小さなプロジェクトを作成しました。 Node.jsを使用してArduinoをプログラムできるJohnny-Fiveを使用して、山の頂上で測定された温度を取得し、Arduinoボードに表示したいと思いました。

使ったパペッティアスクレイピングのタスクを実行します。 Puppeteerは、Googleによって構築された優れたツールです。これは、ヘッドレスChromeインスタンスを制御するために使用できるノードライブラリです。

つまり、基本的にChromeを使用していますが、プログラムで使用しています。

Puppeteerには、テストの自動化、スクリーンショットの作成、シングルページアプリのサーバー側レンダリングバージョンの作成など、多くの実用的な用途があります。

を使用してインストールすることから始めます

npm install puppeteer

Node.jsファイルでは、次のものが必要です。

const puppeteer = require('puppeteer');

その後、私たちは使用することができますlaunch()ブラウザインスタンスを作成する方法:

(async () => {
  const browser = await puppeteer.launch()
})()

を使用しておりますawait、したがって、このメソッド呼び出しをでラップする必要があります非同期関数、私たちすぐに呼び出す

次に、newPage()上の方法browser取得するオブジェクトpageオブジェクト:

(async () => {
  const browser = await puppeteer.launch()
  const page = await browser.newPage()
})()

次はgoto()上の方法pageそのページをロードするオブジェクト:

(async () => {
  const browser = await puppeteer.launch()
  const page = await browser.newPage()
  await page.goto('https://website.com')
})()

最後に、ページを取得できますコンテンツを呼び出すevaluate()の方法page。このメソッドは、必要なページの要素を取得するために必要なコードを追加できるコールバック関数を取ります。関数はページのコンテキストで実行されるため、次のアクセス権があります。documentおよびすべてのブラウザAPI。新しいオブジェクトを返します。これは、evaluate()メソッド呼び出し。

使用できますセレクターAPIページからデータを取得します。

(async () => {
  const browser = await puppeteer.launch()
  const page = await browser.newPage()
  await page.goto('https://website.com')
<span style="color:#66d9ef">const</span> <span style="color:#a6e22e">result</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">await</span> <span style="color:#a6e22e">page</span>.<span style="color:#a6e22e">evaluate</span>(() =&gt; {
<span style="color:#75715e">//...

}) })()

私が抱えている特定の問題に取り掛かりましょう。これは、3315mの山の頂上にある気象ステーションをホストするページです。http://www.meteocentrale.ch/it/europa/svizzera/meteo-corvatsch/details/S067910/

欲しい-9°Cテキスト。ブラウザインスペクタを使用すると、column-4クラス付属。意味がないため、理想的なクラス名ではなく、新しい列を追加することを決定した場合は変更される可能性がありますが、これが得られたものです。

これは、これまでの完全なコードです。

const puppeteer = require('puppeteer');

(async () => { const browser = await puppeteer.launch() const page = await browser.newPage() await page.goto(http://www.meteocentrale.ch/it/europa/svizzera/meteo-corvatsch/details/S067910/)

<span style="color:#66d9ef">const</span> <span style="color:#a6e22e">result</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">await</span> <span style="color:#a6e22e">page</span>.<span style="color:#a6e22e">evaluate</span>(() =&gt; {
  <span style="color:#66d9ef">let</span> <span style="color:#a6e22e">temperature</span> <span style="color:#f92672">=</span> document.<span style="color:#a6e22e">querySelector</span>(<span style="color:#e6db74">'.column-4'</span>).<span style="color:#a6e22e">innerText</span>
<span style="color:#66d9ef">return</span> {
    <span style="color:#a6e22e">temperature</span>
  }

})

console.log(result)

browser.close() })()

このコードを実行すると、resultこの値があります:

{
  temperature: '-9°C'
}

または現在の気温が何であれ。