貴重なデータを求めてインターネットの迷路のような路地を進むため、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 ページの一部のみを訪問します。
多くのウェブサイトでは、サイトのどの部分をクロールしてよいか、どの部分をクロール禁止にするかを指定する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で記述されたウェブサイトのクロールは、静的なHTMLページのクロールよりも困難になる場合があります。これは、コンテンツがJavaScriptコードによって読み込まれ、操作されることが多いためです。このようなウェブサイトをクロールするには、JavaScriptを実行してページのコンテンツをレンダリングできるヘッドレスブラウザを使用する必要があります。このタスクでよく使用される選択肢の一つは、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: ロボット排除プロトコルを確認する
ウェブサイトをクロールまたはスクレイピングする前に、対象サイトがページからのデータ収集を許可していることを確認してください。ウェブサイトのロボット排除プロトコル(robots.txt)ファイルを確認し、ウェブサイトの規則を遵守してください。
ウェブサイトがクロールを許可している場合でも、サイトへの悪影響がないよう配慮しましょう。ロボット排除プロトコルで規定されている規則を遵守し、オフピーク時にクロールを行い、単一のIPアドレスからのリクエストを制限し、リクエスト間に遅延を設けてください。
ただし、ウェブサイトがウェブスクレイピングを許可している場合でも、ブロックに遭遇する可能性はありますので、追加の手順も実行することが重要です。より包括的なガイドについては、Pythonによるウェブスクレイピングのチュートリアルをご覧ください。
#2: プロキシサーバーを利用する
プロキシなしでは Web クローリングはほぼ不可能です。信頼できるプロキシ サービス プロバイダーを選択し、タスクに基づいてデータセンターと住宅の IP プロキシの間で選択します。
デバイスとターゲットウェブサイトの間に仲介者を介することで、IPアドレスのブロックが減り、匿名性が保証され、お住まいの地域ではアクセスできない可能性のあるウェブサイトにもアクセスできるようになります。例えば、ドイツにお住まいの場合、米国のウェブコンテンツにアクセスするには米国のプロキシを利用する必要があるかもしれません。
最適な結果を得るには、大規模な 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は様々なパラメータを残します。これらのパラメータは、エンドユーザーのOSまたはデバイスによって設定されます。スクレイピング中にブラックリストに登録されないようにするには、パラメータの一貫性を保つことが重要です。あるいは、動的なフィンガープリンティング機能を備えたAIベースのプロキシソリューション「Web Unblocker」を使用することもできます。Web Unblockerは、多くのフィンガープリンティング変数を組み合わせることで、最適なフィンガープリンティングを1つ特定した場合でも、フィンガープリンティングは一見ランダムに見えるため、アンチボットチェックを通過できます。
#6: ハニーポットトラップに対する注意
ハニーポット トラップには注意してください。ハニーポット トラップは、Web スクレイパーによって検出できるものの、オーガニック ユーザーには見えない HTML コード内のリンクです。これらのリンクをたどるのはロボットだけであるため、これらのトラップは Web クローラーを識別してブロックするために使用されます。ハニーポットの設定には多くの作業が必要ですが、一部のターゲットは Web クローラーの検出にハニーポットを使用する可能性があるため、リクエストがブロックされ、クローラーが検出された場合は注意してください。
#7: CAPTCHA 解決サービスを利用する
CAPTCHAは、訪問者が人間であることを確認するためにパズルを解く必要があるため、ウェブクローリングにとって大きな課題となります。これらのパズルには、コンピュータが解読するのが難しい画像が含まれていることがよくあります。CAPTCHAを回避するには、専用のCAPTCHA解決サービスを使用するか、Oxylabsのデータクローリングツールのように、CAPTCHAを解決してすぐに使用できる結果を提供する、すぐに使えるクローリングツールを使用します。疑わしい行動が、ターゲットがCAPTCHAの解決を要求するきっかけとなる可能性があります。
#8: クロールパターンを変更する
ブロックされないようにするには、クローラーのナビゲーションパターンを変更して、予測しにくくしましょう。ランダムなクリック、スクロール、マウスの動きなどを追加することで、一般的なユーザーの閲覧行動を模倣できます。ベストプラクティスとしては、一般的なユーザーがウェブサイトをどのように閲覧するかを考え、その原則をツールに適用します。例えば、内部ページをリクエストする前にホームページにアクセスするのは、論理的なパターンです。
#9: スクレーパー速度を下げる
ブロックされるリスクを軽減するには、リクエスト間にランダムな中断を挿入するか、アクションを実行する前に待機コマンドを開始することで、スクレイパーの速度を落とします。URLにレート制限がある場合は、ウェブサイトの制限を尊重し、リクエストのスロットリングを回避するためにスクレイピング速度を下げてください。
#10: オフピーク時間帯のクロール
クローラーは通常のユーザーよりも高速に移動するため、サーバーの負荷に大きな影響を与える可能性があります。高負荷時にクロールすると、サービスの速度が低下するため、ユーザー エクスペリエンスに悪影響を及ぼす可能性があります。これを回避するには、サーバーの負荷を軽減するために、真夜中直後などのオフピーク時間帯にクロールして (サービスに限定されます) ます。
#11: 画像のスクレイピングを避ける
画像は著作権で保護されている可能性のあるデータ量の多いオブジェクトであることが多いため、画像をスクレイピングすることは危険を伴う可能性があります。さらに、画像は JavaScript 要素に隠されていることが多いため、スクレイピング プロセスが複雑になり、Web スクレイパーの速度が低下する可能性があります。 JS 要素から画像を抽出するには、より複雑なスクレイピング手順を使用する必要があります。
#12: ヘッドレスブラウザを使用する
ヘッドレス ブラウザは、通常のブラウザと同じように機能しますが、グラフィカル ユーザー インターフェイスを持たないツールです。 JavaScript 要素をレンダリングすることによって読み込まれるコンテンツのスクレイピングが可能になります。最も広く使用されているブラウザである Chrome と Firefox には、ブロックをトリガーせずに Web スクレイピングに使用できるヘッドレス モードがあります。
Web サイトをクロールする方法に関するビデオチュートリアル
このOxylabsのチュートリアルでは、ウェブクローリングの基本とデータ収集における重要性について、倫理的および法的側面を踏まえながら解説します。Scrapy、Beautiful Soup、Seleniumといった人気ツールを紹介し、ニーズに最適なツールを選ぶお手伝いをします。
このチュートリアルでは、ウェブサイトの構造を理解し、シンプルなウェブクローラーを作成し、必要な情報を抽出する方法を学びます。また、robots.txtのルールを遵守し、サーバーに過負荷をかけないようにするなど、適切なウェブスクレイピングのマナーについても説明します。
このビデオは、動的ページからのデータの取得、複数のページの処理、ブロックの回避などの課題に対処するのにも役立ちます。データを保存して整理する方法と、Web クローリング プロジェクトをより大規模かつ効率的にするためのヒントを示します。最後に、常に倫理的および法的なガイドラインに従うように注意してください。
ウェブクローリングの世界への刺激的な探求も終わりに近づき、この技術を習得することは、広大で絶えず変化するインターネットという世界の中で宝の地図を手に入れることに等しいことが明らかになりました。ウェブクローリングとウェブスクレイピングを区別する複雑な要素を深く掘り下げ、多様な戦略を発見し、JavaScriptウェブサイトとPythonベースのウェブクローリングというダイナミックな領域に踏み込んできました。
私たちのヒントとアドバイスの宝庫は、Web クローリングの取り組みが責任と倫理を保ち、途中で発生する可能性のある落とし穴や障害を回避できるようにします。したがって、この包括的な記事から収集した知識と知恵を武器に、無限のデジタルの海に乗り出すときは、Web クローリングの力を活用する能力が競合他社よりも上位にランクインし、深層に隠された宝石のロックを解除できることを忘れないでください。デジタルの世界。