Web スクレイピングは、World Wide Web から有用な情報を抽出するプロセスです。 Google 検索では、Web クローラー (ボット)、つまりクローラーが Web 上のほぼすべてのコンテンツを調べて、ユーザーに関連するものを選択します。
誰もが情報や知識にアクセスできるようにする必要があるというこの考えは、ワールド ワイド ウェブの形成につながりました。 ただし、お探しのデータは公的な使用が許可されている必要があります。
Webスクレイピングはどのように役立ちますか?
私たちはデータの時代に生きています。 生データは、Web スクレイピングの助けを借りて、より大きな目的を果たすために使用できる有用な情報に変換できます。 製品を改善するために製品のユーザーを分析および研究する、つまりフィードバック ループを作成するために使用できます。
e コマース企業は、競合他社の価格戦略を研究し、それに応じて独自の戦略を立てるためにそれを使用する場合があります。 Web スクレイピングは、天気予報やニュースの報道にも使用できます。
課題
#1。 IP制限
いくつかの Web サイトでは、IP アドレスまたは地理位置情報を検出することにより、特定の時間間隔でサイトのデータを取得するために行うことができる要求の数を制限しています。 これは、Web サイトに対する悪意のある攻撃を防ぐためです。
#2。 キャプチャ
Web サイトにアクセスしようとしている本物の人間とボットを区別することは、キャプチャが実際に行うことです。 Web サイトは、Web サイト上のスパムを防止するため、および Web サイト上のスクレーパーの数を制御するために使用します。
#3。 クライアント側のレンダリング
これは、Web スクレイパーにとって最大の障害の 1 つです。 最新の Web サイトは、単一ページのアプリケーションを作成できるフロントエンド フレームワークを使用しています。 ほとんどの単一ページ アプリケーションには、サーバーでレンダリングされるコンテンツがありません。 代わりに、クライアント側の JavaScript を使用して、必要に応じてコンテンツを生成します。 これにより、スクレイパーが Web ページの内容を知ることが難しくなります。 コンテンツを取得するには、クライアント側の JavaScript をレンダリングする必要があります。
etechjp.com API
Web スクレイピング API は、すべてを処理するため、Web スクレイピングの実行中に直面する課題のほとんどを解決します。 etechjp.com API を調べて、それを Web スクレイピングに使用する方法を見てみましょう。
etechjp.com の API には、簡単な 3 ステップのプロセスがあります。
- スクレイピングする URL を提供する
- いくつかの構成オプションを提供する
- データを取得する
ウェブページをスクレイピングしてから、生の HTML データを文字列として返すか、リンクからアクセスできる HTML ファイルとして返すことができます。
API の使用
このチュートリアルでは、javascript ランタイム環境である NodeJS を使用して etechjp.com API を使用する方法を学習します。 システムに NodeJS をインストールしていない場合は、先に進む前にインストールしてください。
- 現在のフォルダーまたはディレクトリのターミナルでコマンド npm init -y を実行します。 package.json ファイルが作成されます。
- package.json ファイル内で、メイン キーの値がデフォルトで別の値である場合は index.mjs に変更します。 または、キー タイプを追加して、その値をモジュールと等しく設定することもできます。
{ “type”: “module” }
- ターミナルで npm i axios コマンドを実行して、axios という名前の依存関係を追加します。 この依存関係は、特定のエンドポイントにフェッチ リクエストを送信するのに役立ちます。
- package.json は次のようになります。
{ "name": "webscraping", "version": "1.0.0", "description": "", "main": "index.mjs", "scripts": { "test": "echo "Error: no test specified" && exit 1" }, "author": "Murtuzaali Surti", "license": "ISC", "dependencies": { "axios": "^1.1.3" } }
- このように index.mjs ファイル内に axios をインポートします。 ここでは、ES モジュールであるため、 import キーワードが使用されます。 commonJS ファイルの場合は、require キーワードになります。
import axios from ‘axios’
- etechjp.com API へのすべてのリクエストのベース URL は、すべてのエンドポイントで同じになります。 したがって、定数内に格納できます。
const baseUrl="https://api.etechjp.com.com"
- スクレイピングしてデータを取得する URL を指定します。
let toScrapeURL = "https://developer.mozilla.org/en-US/"
- 非同期関数を作成し、その中で axios を初期化します。
async function getData() { const res = await axios({}) return res }
- axios 設定オプションでは、メソッドを post として指定する必要があります。URL とエンドポイント、値が etechjp.com によって提供される API キーとなる x-api-key と呼ばれるヘッダー、および最後に送信されるデータ オブジェクトを指定する必要があります。 etechjp.com API に。 dash.etechjp.com.com にアクセスすると、API キーを取得できます。
const res = await axios({ method: "post", url: `${baseUrl}/webscraping`, headers: { "x-api-key": "your api key" }, data: { url: toScrapeURL, output: 'file', device: 'desktop', renderJS: true } })
- ご覧のとおり、データ オブジェクトには次のプロパティがあります。
- url: スクレイピングが必要な Web ページの URL。
- 出力: データが表示される形式。文字列としてインラインで表示されるか、HTML ファイルで表示されます。 インライン文字列がデフォルト値です。
- device: Web ページを開くデバイスのタイプ。 ‘desktop’、’mobile’、’tablet’ の 3 つの値を受け入れ、’desktop’ がデフォルト値です。
- renderJS: javascript をレンダリングするかどうかを指定するブール値。 このオプションは、クライアント側のレンダリングを扱う場合に役立ちます。
- 非同期関数を呼び出してデータを取得します。 IIFE (Immediately Invoked Function Expression) を使用できます。
(async () => { const data = await getData() console.log(data.data) })()
- 応答は次のようになります。
{ timestamp: 1669358356779, apiStatus: 'success', apiCode: 200, meta: { url: 'https://murtuzaalisurti.github.io', device: 'desktop', output: 'file', blockAds: true, renderJS: true, test: { id: 'mvan3sa30ajz5i8lu553tcckchkmqzr6' } }, data: 'https://api-assets.etechjp.com.com/tests/web-scraping/pbn0v009vksiszv1cgz8o7tu.html' }
HTML の解析
HTML を解析するには、node-html-parser という名前の npm パッケージを使用して、HTML からデータを抽出することもできます。 たとえば、Web ページからタイトルを抽出する場合は、次のようにします。
import { parse } from ‘node-html-parser’ const html = parse(htmlData) // htmlData is the raw html string you get from the etechjp.com API.
または、Web サイトからのメタデータのみが必要な場合は、etechjp.com のメタデータ API エンドポイントを使用できます。 HTML を解析する必要さえありません。
etechjp.com API を使用する利点
シングル ページ アプリケーションでは、多くの場合、コンテンツはサーバーでレンダリングされず、代わりに JavaScript を使用してブラウザーによってレンダリングされます。 したがって、コンテンツのレンダリングに必要な JavaScript をレンダリングせずに元の URL をスクレイピングすると、コンテンツのないコンテナー要素しか得られません。 例を示しましょう。
これは、react と vitejs を使用して構築されたデモ Web サイトです。 renderJS オプションを false に設定して etechjp.com API を使用して、このサイトをスクレイプします。 何を手に入れましたか?
<body> <div id="root"></div> <body>
コンテンツのないルート コンテナーだけがあります。 ここで renderJS オプションが機能します。 次に、renderJS オプションを true に設定して、同じサイトをスクレイピングしてみます。 あなたは何を得ますか?
<body> <div id="root"> <div class="App"> <div> <a href="https://vitejs.dev" target="_blank"> <img src="/vite.svg" class="logo" > </a> <a href="https://reactjs.org" target="_blank"> <img src="/assets/react.35ef61ed.svg" class="logo react" > </a> </div> <h1>Vite + React</h1> <div class="card"> <button>count is 0</button> <p>Edit <code>src/App.jsx</code> and save to test HMR</p> </div> <p class="read-the-docs">Click on the Vite and React logos to learn more</p> </div> </div> </body>
etechjp.com API を使用するもう 1 つの利点は、ローテーション プロキシを使用できるため、Web サイトによる IP ブロッキングが発生しないことを確認できることです。 etechjp.com API には、そのプレミアム プランの下にプロキシ機能が含まれています。
最後の言葉
Web スクレイピング API を使用すると、技術的な手間をかけずに、スクレイピングされたデータのみに集中できます。 それとは別に、etechjp.com API は、壊れたリンクのチェック、メタ スクレイピング、Web サイトの負荷統計、スクリーンショットのキャプチャ、サイトのステータスなどの機能も提供します。 そのすべてが単一の API の下にあります。 詳細については、etechjp.com API の公式ドキュメントを参照してください。