cURL: その概要とウェブスクレイピングへの活用方法

cURLはプログラマーがデータ収集やデータ転送に使用する汎用コマンドです。しかし、ウェブスクレイピングにcURLをどのように活用できるでしょうか?この記事では、その始め方を解説します。
1 分読
data collection and web scraping with cURL

このブログ記事では以下の内容を学びます:

  • cURLとは何か?
  • cURLの使い方
  • なぜcURLはこれほど人気があるのか?
  • プロキシとcURLの併用
  • User-Agentの変更方法
  • cURLを使ったウェブスクレイピング

cURLとは何か?

cURLは、ネットワークプロトコルを介してデータを転送するために使用できるコマンドラインツールです。cURLという名前は「Client URL」の略で、「curl」とも表記されます。この人気のコマンドはURL構文を使用してサーバーとの間でデータを転送します。Curlは、無料で使いやすいクライアントサイドのURL転送ライブラリである「libcurl」によって動作します。

curlを使用することの利点は何か?

このコマンドの汎用性により、以下のようなさまざまなユースケースでcurlを使用できます:

  • ユーザー認証
  • HTTPポスト
  • SSL接続
  • プロキシサポート
  • FTPアップロード

curlの最もシンプルな「ユースケース」は、サポートされているプロトコルの1つを使用してウェブサイト全体をダウンロード・アップロードすることです。

Curlのプロトコル

curlはサポートされているプロトコルの長いリストを持っていますが、特定のプロトコルを指定しない場合はデフォルトでHTTPを使用します。サポートされているプロトコルの一覧は以下の通りです:

DICT FILE FTP
FTPS GOPHER HTTP
HTTPS IMAP IMAPS
LDAP POP3 RTMP
RTSP SCP SFTP
SMB SMBS TELNET
TFTP

curlのインストール

curlコマンドはLinuxディストリビューションにデフォルトでインストールされています。

curlがすでにインストールされているか確認するには?

1. Linuxコンソールを開く

2. 「curl」と入力し、「Enter」を押す。

3. curlがすでにインストールされている場合、以下のメッセージが表示されます:

curl: try 'curl --help' for more information

4. curlがインストールされていない場合、「command not found」というメッセージが表示されます。その場合はディストリビューションのパッケージを使用してインストールできます(詳細は以下を参照)。

cURLの使い方

Curlの構文は非常にシンプルです:

curl [options] [url]

例えば、webpage.comというウェブページをダウンロードしたい場合は、以下を実行します:

curl www.webpage.com

コマンドを実行すると、ターミナルウィンドウにページのソースコードが表示されます。プロトコルを指定しない場合、curlはデフォルトでHTTPを使用することに注意してください。特定のプロトコルを定義する方法の例を以下に示します:

curl ftp://webpage.com

「://」を追加し忘れた場合、curlは使用するプロトコルを推測します。

コマンドの基本的な使い方について簡単に説明しましたが、オプションの一覧はcurlのドキュメントサイトで確認できます。オプションとは、URLに対して実行できるアクションのことです。オプションを選択すると、記載したURLに対してcurlがどのアクションを実行するかが決まります。URLはcURLがそのアクションを実行する場所を示します。そしてcURLでは1つまたは複数のURLを指定できます。

複数のURLをダウンロードするには、各URLの前に-0とスペースを付けます。1行で記述することも、各URLを別々の行に記述することもできます。ページを指定してURLの一部をダウンロードすることもできます。例えば:

 curl.exe -O http://example.com/page{1,4,6}.html

ダウンロードの保存

curlを使用してURLのコンテンツをファイルに保存するには、2つの方法があります:

1. -oメソッド:URLが保存されるファイル名を追加できます。このオプションの構造は以下の通りです:

curl -0 filename.html http://example.com/file.html

2. -Oメソッド:このオプションではURL名でファイルを保存できるため、ファイル名を追加する必要はありません。このオプションを使用するには、URLの前に-Oを付けるだけです。

ダウンロードの再開

ダウンロードが途中で止まることがあります。そのような場合は、コマンドの先頭に-Cオプションを追加して再実行します:

curl -C - -O http://website.com/file.html

なぜcurlはこれほど人気があるのか?

Curlはまさにコマンドの「スイスナイフ」であり、複雑な操作のために作られています。ただし、よりシンプルなタスクに適した「wget」や「Kurly」などの代替ツールも存在します。

Curlはほぼすべてのプラットフォームで利用可能であるため、開発者に人気があります。場合によってはデフォルトでインストールされていることもあります。つまり、どのようなプログラムやジョブを実行していても、curlコマンドは機能するはずです。

また、OSが10年以内のものであれば、curlがインストールされている可能性が高いです。ブラウザでドキュメントを読んだり、curlのドキュメントを確認したりすることもできます。最新バージョンのWindowsを実行している場合、おそらくすでにcurlがインストールされています。インストールされていない場合は、Stack Overflowのこの投稿を参照してください。

プロキシとcURLの併用

cURLとプロキシを組み合わせて使用することを好む方もいます。その利点には以下が含まれます:

  1. 異なる地理的位置からのデータリクエストを正常に管理する能力の向上。
  2. 同時に実行できる並行データジョブの数を飛躍的に増加させること。 

これを実現するために、cURLにすでに組み込まれている「-x」および「(- – proxy)」機能を使用できます。使用しているプロキシをcURLと統合するために使用できるコマンドラインの例を以下に示します:

$ curl -x 026.930.77.2:6666 http://linux.com/

上記のコードスニペットでは、「6666」はポート番号のプレースホルダーであり、「026.930.77.2」はIPアドレスです。 

知っておくべきこと:cURLは、HTTP、HTTPS、SOCKSなど、現在使用されている一般的なプロキシタイプのほとんどと互換性があります。

User-Agentの変更方法

User-Agentは、ターゲットサイトが情報を要求しているデバイスを識別するための特性です。ターゲットサイトは、希望するターゲットデータを返す前に、リクエスターが特定の条件を満たすことを要求する場合があります。これはデバイスの種類、オペレーティングシステム、または使用しているブラウザに関係することがあります。このシナリオでは、データを収集するエンティティはターゲットサイトの理想的な「候補者」をエミュレートする必要があります。 

例として、ターゲットにしているサイトがリクエスト側にChromeブラウザの使用を「好む」場合を考えてみましょう。cURLを使用して目的のデータセットを取得するには、以下のようにこの「ブラウザの特性」をエミュレートする必要があります: 

curl -A "Goggle/9.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Chrome/103.0.5060.71" https://getfedora.org/

cURLを使ったウェブスクレイピング

プロのヒント:ウェブサイトのルールを必ず遵守し、一般的にパスワードで保護されたコンテンツへのアクセスは試みないでください。これは多くの場合違法であるか、少なくとも好ましくない行為とみなされます。

ウェブスクレイピング時の反復プロセスを自動化するためにcurlを使用でき、面倒なタスクを回避するのに役立ちます。そのためにはPHPを使用する必要があります。GitHubで見つけた例を以下に示します:


<?php

/**
 * @param string $url - the URL you wish to fetch.
 * @return string - the raw HTML response.
 */
function web_scrape($url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}

/**
 * @param string $url - the URL you wish to fetch.
 * @return array - the HTTP headers returned.
 */
function fetch_headers($url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}

// Example usage:
// var_dump(get_headers("https://www.example.com"));
// echo web_scrape('https://www.example.com/');

?>

curlを使用してウェブページをスクレイピングする場合、使用すべき3つのオプションがあります:

  • セッションを初期化する
curl_init($url)
  • セッションを実行する
curl_exec()
  • セッションを終了する
curl_close()

その他に使用すべきオプションには以下が含まれます:

  • スクレイピングしたいURLを設定する
CURLOPT_URL
  • スクレイピングしたページを変数として保存するようcurlに指示します。(これにより、ページから抽出したい内容を正確に取得できます。)
CURLOPT_RETURNTRANSFER

まとめ

cURLは強力なウェブスクレイピングツールですが、データ収集とデータクリーニングの両面で企業の貴重な開発者の時間を必要とします。そこでBright Dataの出番です。世界第1位のウェブデータインフラであるBright Dataは、ウェブスクレイピングのニーズに対応するための幅広い製品を提供しています。Bright Dataの製品には、開発者向けに構築されたWeb Scraper API、ウェブサイトのブロック解除自動化が組み込まれた自動化ブラウザ、スクレイピングよりも正確なデータの受け取りを希望する方向けのデータセットマーケットプレイス、および400M+ monthlyの信頼性の高いプロキシが含まれます。