貴重なデータを求めてインターネットの迷路のような路地を進むため、Web クローリングという冒険的な旅に乗り出すことは、スリリングであると同時にやりがいのあることでもあります。広大なデジタル世界では、ウェブ クローリングの技術が重要なスキルとして浮上しており、効率的に情報をマイニングし、洞察を深め、拡大し続けるワールド ワイド ウェブを理解できるようになります。
この啓発的な記事では、Web クローリングの複雑な領域を横断し、Web クローリングと Web スクレイピングの違いを明らかにしながら、Web クローリングの腕前を向上させるさまざまな戦略とテクノロジーを探ります。
JavaScript Web サイトの動的な領域から Python の強力でシンプルな機能まで、Web クローリングの探索がスムーズで効果的で、妨げられないようにするための多数のヒントとテクニックをガイドします。
目次
さあ、シートベルトを締めて、ウェブ クローリングの魅惑的な世界へのエキサイティングな旅に乗り出す準備をしましょう。
Web クローリングと Web スクレイピング
Web スクレイピングと Web クローリングは同じものであると考えられており、どちらもデータ マイニングに使用されますが、重要な違いがあります。これらの違いを調査し、お客様のニーズとビジネス目標に最適なアプローチを決定するお手伝いをします。
主な違い
簡単に言うと、Web クローリングは検索エンジンの機能です。検索エンジンは Web をナビゲートして利用可能な情報を探し、アクセス可能なすべてのリンクをたどります。この一般的なプロセスは、特定の Web サイトからできるだけ多くの情報 (またはすべて) を収集することを目的としています。基本的に、これは Google が行っていることです。Web ページ全体を表示し、利用可能なすべてのデータにインデックスを付けます。
一方、Webスクレイピングは収集した情報をダウンロードしたい場合に利用されます。 Web スクレイピング (Web データ抽出とも呼ばれます) は、より焦点を絞ったプロセスです。コマンドをカスタマイズし、スクレイピング プロキシを利用することで、対象の Web サイトから特定のデータを抽出できます。その後、結果を JSON や Excel などの適切な形式でダウンロードできます。
場合によっては、Web クローリングと Web スクレイピングの両方を 1 つの目的を達成するために使用することができ、基本的にプロセスのステップ 1 と 2 として機能します。この 2 つを組み合わせることで、クローラーを使用して主要な Web サイトから大量の情報を収集し、後でスクレイパーを使用して必要な特定のデータを抽出してダウンロードできます。
4 つの Web クローリング戦略
一般に、Web クローラーは、ドメインごとの最大ページ数、深さ、期間などの要因によって決定されるクローラーの予算に基づいて、Web ページの一部のみを訪問します。
多くの Web サイトでは、サイトのどの部分をクロールできるか、どの部分をクロールできないかを指定する robots.txt ファイルが提供されています。さらに、robots.txt よりも詳細な sitemap.xml があり、ボットがクロールするパスをガイドし、各 URL に追加のメタデータを提供します。
Web クローラーの一般的な用途は次のとおりです。
- Googlebot、Bingbot、Yandex Bot などの検索エンジンは、Web のかなりの部分から HTML を収集し、データにインデックスを付けて簡単に検索できるようにします。
- SEO 分析ツールは、HTML だけでなく、応答時間や応答ステータスなどのメタデータも収集して、壊れたページを特定し、バックリンク分析のためにドメイン間のリンクを追跡します。
- 価格監視ツールは、電子商取引 Web サイトをクロールして商品ページを見つけ、メタデータ、特に価格を抽出します。これらの製品ページは定期的に再アクセスされます。
- 共通クロールは、 Web クロール データのパブリック リポジトリ、 以下のような 2022年5月のアーカイブ 34 億 5,000 万の Web ページが含まれています。
JavaScript Web サイトをクロールする方法
JavaScript Web サイトのクロールは、コンテンツが JavaScript コードによって読み込まれ操作されることが多いため、静的 HTML ページのクロールよりも困難になる場合があります。このような Web サイトをクロールするには、JavaScript を実行してページのコンテンツをレンダリングできるヘッドレス ブラウザを使用する必要があります。このタスクの一般的な選択肢の 1 つは、Puppeteer ライブラリと Node.js ランタイム環境の組み合わせです。
ここでは、Puppeteer と Node.js を使用して JavaScript Web サイトをクロールするためのステップバイステップのガイドを示します。
1.Node.jsをインストールする
最新バージョンの Node.js を公式 Web サイト (https://nodejs.org/).
2. 新しいプロジェクト ディレクトリを作成する
プロジェクト用に新しいディレクトリを作成し、コマンド ラインを使用してそこに移動します。
mkdir js-crawler
cd js-crawler
3. 新しい Node.js プロジェクトを初期化する
プロジェクト ディレクトリで次のコマンドを実行して、新しいファイルを作成します。 package.json
デフォルト設定のファイル。
npm init -y
4.Puppeteerをインストールする
プロジェクト ディレクトリで次のコマンドを実行して、Puppeteer をインストールします。
npm install puppeteer
5. 新しい JavaScript ファイルを作成する
という名前の新しいファイルを作成します
crawler.js
プロジェクト ディレクトリ内にあります。このディレクトリには、JavaScript Web サイトをクロールするためのコードが含まれます。
6. クローラーコードを書く
開ける
crawler.js
次のコードを追加します。
const puppeteer = require('puppeteer');
async function crawlJavaScriptWebsite(url) {
新しいブラウザインスタンスを起動する
const browser = await puppeteer.launch({ headless: true });
ブラウザで新しいページを作成する
const page = await browser.newPage();
ターゲット URL に移動します
await page.goto(url, { waitUntil: 'networkidle2' })
を使用してページからデータを抽出します
evaluate()
const data = await page.evaluate(() => {
ここにカスタム JavaScript コードを記述して、必要なデータを抽出します。たとえば、ページからすべての見出し (h1 要素) を抽出してみましょう。
const headings = Array.from(document.querySelectorAll('h1')).map(heading => heading.textContent);
return {
headings,
};
});
ブラウザを閉じます
await browser.close();
抽出したデータを返す
return data;
}
使用例:
crawlJavaScriptWebsite('https://example.com/')
.then(data => console.log(data))
.catch(err => console.error(err));
交換してください
https://example.com/
URL をターゲット Web サイトの URL に置き換え、
page.evaluate()
必要なデータを抽出する機能。
7. クローラーを実行する
プロジェクト ディレクトリで次のコマンドを実行して、クローラーを実行します。
node crawler.js
スクリプトはヘッドレス ブラウザを起動し、ターゲット URL に移動し、で指定された JavaScript コードを実行します。
page.evaluate()
関数。抽出されたデータはコンソールに記録されます。
これは JavaScript Web サイトをクロールする基本的な例であることに注意してください。より高度な使用例では、ページの操作、AJAX リクエストの処理、ページのスクロール、または CAPTCHA と Cookie の処理が必要になる場合があります。
Python で Web をクロールする方法
Python を使用して Web サイトをクロールするには、Web ページを取得し、そのコンテンツを解析し、他のページへのリンクをたどる必要があります。このガイドでは、Requests と Beautiful Soup という 2 つの人気のある Python ライブラリを使用します。このガイドは、Python がインストールされており、Python プログラミングの基本を理解していることを前提としています。
ステップ 1: 必要なライブラリをインストールする
pip を使用して Requests ライブラリと Beautiful Soup ライブラリをインストールします。
pip install requests beautifulsoup4
ステップ 2: ライブラリをインポートする
必要なライブラリを Python スクリプトにインポートします。
import requests
from bs4 import BeautifulSoup
ステップ 3: Web ページのコンテンツを取得する関数を作成する
Requests ライブラリを使用して Web ページのコンテンツをフェッチする関数を作成します。
def fetch_page(url):
response = requests.get(url)
if response.status_code == 200:
return response.text
else:
print(f"Failed to fetch {url} (status code {response.status_code})")
return None
ステップ 4: Web ページのコンテンツを解析する関数を作成する
Beautiful Soup ライブラリを使用して Web ページのコンテンツを解析する関数を作成します。
def parse_page(html):
soup = BeautifulSoup(html, "html.parser")
return soup
ステップ 5: 解析されたコンテンツからリンクを抽出する関数を作成する
解析された Web ページのコンテンツからすべてのリンクを抽出する関数を作成します。
def extract_links(soup, base_url):
links = []
for a_tag in soup.find_all("a"):
href = a_tag.get("href")
if href and not href.startswith("#"):
if not href.startswith("http"):
href = base_url + href
links.append(href)
return links
ステップ 6: Web サイトをクロールする関数を作成する
Web サイトを再帰的にクロールする関数を作成します。
def crawl_website(url, max_depth=2, depth=0):
if depth > max_depth:
return
html = fetch_page(url)
if not html:
return
soup = parse_page(html)
links = extract_links(soup, url)
print(f"{' ' * depth}[{depth}] {url}")
for link in links:
crawl_website(link, max_depth, depth + 1)
ステップ 7: クローラーを実行する
を呼び出してクローラーを実行します。
crawl_website
必要な URL と最大の深さを指定した関数:
if __name__ == "__main__":
start_url = "https://example.com/"
max_depth = 2
crawl_website(start_url, max_depth)
このステップバイステップのガイドでは、Python を使用して Web サイトをクロールする方法を説明します。カスタマイズできます
crawl_website
特定の Web サイト構造を処理したり、抽出された情報を保存するためのロジックを追加したり、robots.txt の処理、レート制限、リクエストの並列化などのより高度なクロール機能を実装したりする機能です。
ブロックされずにウェブサイトをクロールする方法に関する 12 のヒント
ブロックに遭遇せずに Web クローリングを行うための主な戦略は次のとおりです。
#1: ロボット排除プロトコルを確認する
Web サイトをクロールまたはスクレイピングする前に、ターゲットがそのページからのデータ収集を許可していることを確認してください。 Web サイトのロボット排除プロトコル (robots.txt) ファイルを検査し、Web サイトの規制に従ってください。
Web サイトでクロールが許可されている場合でも、敬意を払い、サイトに損害を与えないでください。ロボット排除プロトコルで指定された規制を遵守し、オフピーク時間にクロールし、単一の IP アドレスから発信されるリクエストを制限し、リクエスト間の遅延を確立します。
ただし、Web サイトで Web スクレイピングが許可されている場合でも、ブロックが発生する可能性があるため、追加の手順も実行することが重要です。より包括的なガイドについては、Web スクレイピング Python チュートリアルを参照してください。
#2: プロキシサーバーを利用する
プロキシなしでは Web クローリングはほぼ不可能です。信頼できるプロキシ サービス プロバイダーを選択し、タスクに基づいてデータセンターと住宅の IP プロキシの間で選択します。
デバイスとターゲット Web サイトの間に仲介者を使用すると、IP アドレスのブロックが減少し、匿名性が保証され、お住まいの地域では利用できない Web サイトにアクセスできるようになります。たとえば、ドイツに居住している場合、米国の Web コンテンツにアクセスするには、米国のプロキシを利用する必要がある場合があります。
最適な結果を得るには、大規模な IP プールと幅広い場所を備えたプロキシ プロバイダーを選択してください。
#3: IP アドレスのローテーション
プロキシ プールを使用する場合、IP アドレスをローテーションすることが重要です。
同じ IP アドレスからあまりに多くのリクエストを送信すると、ターゲット Web サイトはすぐにあなたを脅威として認識し、IP アドレスをブロックします。プロキシ ローテーションを使用すると、あたかも複数の異なるインターネット ユーザーであるかのように見せることができ、ブロックされる可能性が低くなります。
すべての Oxylabs レジデンシャル プロキシは IP をローテーションしますが、データセンター プロキシを使用している場合は、プロキシ ローテータ サービスを使用する必要があります。また、IPv6 と IPv4 プロキシもローテーションします。 IPv4 と IPv6 の違いに興味がある場合は、私の同僚の Iveta が書いた記事を読んでください。
#4: リアル ユーザー エージェントを使用する
Web サイトをホストするほとんどのサーバーは、クロール ボットが生成する HTTP リクエストのヘッダーを検査できます。ユーザー エージェントと呼ばれるこの HTTP 要求ヘッダーには、オペレーティング システムやソフトウェアからアプリケーションの種類やバージョンに至るまで、さまざまな情報が含まれています。
サーバーは、疑わしいユーザー エージェントを簡単に検出できます。リアル ユーザー エージェントには、オーガニック訪問者によって送信される一般的な HTTP リクエスト構成が含まれています。ブロックされないようにするには、ユーザー エージェントをオーガニックなものに似せるようにカスタマイズしてください。
Web ブラウザによって行われる各リクエストにはユーザー エージェントが含まれるため、ユーザー エージェントを頻繁に切り替える必要があります。
最新の最も人気のあるユーザー エージェントを利用することも重要です。サポートされていない Firefox バージョンの 5 年前のユーザー エージェントを使用してリクエストを行っている場合、多くの危険信号が発生します。現在最も人気のあるユーザー エージェントを示す公開データベースをインターネット上で見つけることができます。また、定期的に更新される独自のデータベースもありますので、アクセスが必要な場合はお問い合わせください。
#5: 指紋を正しく設定する
アンチスクレイピングメカニズムはますます洗練されており、一部の Web サイトでは伝送制御プロトコル (TCP) または IP フィンガープリンティングを使用してボットを検出しています。
Web をスクレイピングするとき、TCP はさまざまなパラメータを残します。これらのパラメータは、エンド ユーザーのオペレーティング システムまたはデバイスによって確立されます。スクレイピング中にブラックリストに載ることを回避する方法を知りたい場合は、パラメータが一貫していることを確認してください。あるいは、動的なフィンガープリント機能を備えた AI を活用したプロキシ ソリューションである Web Unblocker を使用することもできます。 Web Unblocker は、多くのフィンガープリント変数を組み合わせて、最も効果的なフィンガープリントを 1 つ特定した場合でも、フィンガープリントは一見ランダムであるように見え、アンチボット チェックを通過できます。
#6: ハニーポットトラップに対する注意
ハニーポット トラップには注意してください。ハニーポット トラップは、Web スクレイパーによって検出できるものの、オーガニック ユーザーには見えない HTML コード内のリンクです。これらのリンクをたどるのはロボットだけであるため、これらのトラップは Web クローラーを識別してブロックするために使用されます。ハニーポットの設定には多くの作業が必要ですが、一部のターゲットは Web クローラーの検出にハニーポットを使用する可能性があるため、リクエストがブロックされ、クローラーが検出された場合は注意してください。
#7: CAPTCHA 解決サービスを利用する
CAPTCHA は、訪問者が人間であることを確認するためにパズルを解く必要があるため、Web クローリングに大きな課題をもたらします。これらのパズルには、コンピューターが解読するのが難しい画像が含まれていることがよくあります。 CAPTCHA をバイパスするには、専用の CAPTCHA 解決サービス、またはすぐに使用できるクロール ツール (CAPTCHA を解決してすぐに使用できる結果を提供する Oxylabs のデータ クローリング ツールなど) を使用します。不審な動作により、ターゲットが CAPTCHA 解決を要求する可能性があります。
#8: クロールパターンを変更する
ブロックされないようにするには、クローラーのナビゲーション パターンを変更して、予測しにくくします。ランダムなクリック、スクロール、マウスの動きを追加して、通常のユーザーのブラウジング動作を模倣できます。ベスト プラクティスとしては、一般的なユーザーが Web サイトをどのように閲覧するかを考え、その原則をツールに適用します。たとえば、内部ページをリクエストする前にホーム ページにアクセスするのは論理的なパターンです。
#9: スクレーパー速度を下げる
ブロックされるリスクを軽減するには、リクエスト間にランダムな休憩を追加するか、アクションを実行する前に待機コマンドを開始して、スクレイパーの速度を遅くします。 URL がレート制限されている場合は、Web サイトの制限を尊重し、リクエストのスロットリングを避けるためにスクレイピング速度を下げます。
#10: オフピーク時間帯のクロール
クローラーは通常のユーザーよりも高速に移動するため、サーバーの負荷に大きな影響を与える可能性があります。高負荷時にクロールすると、サービスの速度が低下するため、ユーザー エクスペリエンスに悪影響を及ぼす可能性があります。これを回避するには、サーバーの負荷を軽減するために、真夜中直後などのオフピーク時間帯にクロールして (サービスに限定されます) ます。
#11: 画像のスクレイピングを避ける
画像は著作権で保護されている可能性のあるデータ量の多いオブジェクトであることが多いため、画像をスクレイピングすることは危険を伴う可能性があります。さらに、画像は JavaScript 要素に隠されていることが多いため、スクレイピング プロセスが複雑になり、Web スクレイパーの速度が低下する可能性があります。 JS 要素から画像を抽出するには、より複雑なスクレイピング手順を使用する必要があります。
#12: ヘッドレスブラウザを使用する
ヘッドレス ブラウザは、通常のブラウザと同じように機能しますが、グラフィカル ユーザー インターフェイスを持たないツールです。 JavaScript 要素をレンダリングすることによって読み込まれるコンテンツのスクレイピングが可能になります。最も広く使用されているブラウザである Chrome と Firefox には、ブロックをトリガーせずに Web スクレイピングに使用できるヘッドレス モードがあります。
Web サイトをクロールする方法に関するビデオチュートリアル
この Oxylabs チュートリアルでは、倫理的および法的側面について説明しながら、Web クローリングの基本とデータ収集におけるその重要性について説明します。 Scrapy、Beautiful Soup、Selenium などの人気のあるツールが表示され、ニーズに最適なものを選択するのに役立ちます。
このチュートリアルは、Web サイトの構造を理解し、簡単な Web クローラーを作成し、必要な情報を抽出するのに役立ちます。また、robots.txt ルールを尊重し、サーバーに過負荷をかけないなど、Web スクレイピングの適切なマナーに従うことも思い出させます。
このビデオは、動的ページからのデータの取得、複数のページの処理、ブロックの回避などの課題に対処するのにも役立ちます。データを保存して整理する方法と、Web クローリング プロジェクトをより大規模かつ効率的にするためのヒントを示します。最後に、常に倫理的および法的なガイドラインに従うように注意してください。
ウェブ クローリングの世界への爽快な探索が終わりに達すると、この技術を習得することは、インターネットの広大で常に変化する風景の中で宝の地図を手に入れることに似ていることが明らかになります。私たちは、Web クローリングと Web スクレイピングを区別する複雑さを掘り下げ、多様な戦略を明らかにし、JavaScript Web サイトと Python を利用した Web クローリングの動的な領域に踏み込みました。
私たちのヒントとアドバイスの宝庫は、Web クローリングの取り組みが責任と倫理を保ち、途中で発生する可能性のある落とし穴や障害を回避できるようにします。したがって、この包括的な記事から収集した知識と知恵を武器に、無限のデジタルの海に乗り出すときは、Web クローリングの力を活用する能力が競合他社よりも上位にランクインし、深層に隠された宝石のロックを解除できることを忘れないでください。デジタルの世界。