MENU
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
あらゆるモノにHackする、探究者の読み物。
Let's Hack Tech
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
Let's Hack Tech
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
  1. ホーム
  2. プログラミング
  3. 言語別
  4. JavaScript
  5. JavaScript(JQuery)で他サイトをスクレイピング(クローリング)する方法

JavaScript(JQuery)で他サイトをスクレイピング(クローリング)する方法

2023 2/02
JavaScript
2019-06-052023-02-02
jquery
目次

JavaScriptでスクレイピングしたい!

JavaScriptというか、JQueryですね。どちらかと言うと。

WebサイトやWebアプリを作っていたりすると、たまーにスクレイピングしたい時ってありますよね。

「他所のサイトからちょっとデータを拝借して・・・」って時、APIが提供されていればいいんですが、そうじゃない場合、PHPとかでスクレイピングしようとすると、一気にめんどくさくなります。

JQueryをワードプレスで動かす方法に関する記事はこちら。

あわせて読みたい
ワードプレスでJQueryを動かすための記述方法 ワードプレスのサイトで会員登録をさせたい場合など、ユーザーの入力を受け付ける場合はJQueryは非常に便利です。ワードプレス上でJQueryを動かしたいけど、どんな記述の仕方をすればいいのかわからない。そんな方向けの記事です。

色々使ってみた結果、DOM操作の至上はやはりJQueryである

もちろんPHPでも出来るんですが、「そこまで必死にならなくていいし。」みたいなかるーいクローリングの場合サクッとJQueryでスクレイピング出来ないのか?とか、考えたことはありませんか?

僕自身スクレイピングは割と多様する技術の一つで、色んな言語の色んなライブラリを使ってきましたが、DOM操作という点において、もっとも優れているのはJQueryであり今のところ右に出る言語も、特定のライブラリもありません。

JavaScriptってスクレイピング出来るの?

結論から言うと、できません。何を持ってして「スクレイピング」と呼ぶのかという、細かいところはありますが、とりあえずJavaScriptだけでスクレイピングを完結させることは不可能です。

クロスドメイン制約

という、取り決めがJavaScriptには存在しており、ドメインを跨いだデータのリスエストを受け付けません。

HTTPリクエストだけ、他でやる

これが唯一無二の解答であります。

結局、何でJavaScriptでスクレイピングやりたいかって言うと、上でも述べた通り、JQueryによるDOM操作が楽だからなんですよね。

他ってのは、何の言語でも問題ないです。サーバーサイドで動きさえすれば。

この記事内ではPHPを使って実装してみます。

JavaScriptでのスクレイピング実装

実際、JSとPHPのコンビネーションによるサンプルを書いていきます。

ここではクエリストリングとして受け取ったURLにアクセスして、当該URLのページタイトルの取得を目指します。

PHPでターゲットURLにアクセス

まずはPHP側ですが、非常に単純です。

<?php
$html = file_get_contents($_GET['url']);
echo $html;

これだけ。

ファイル名は[mirror.php]として、FTPでサーバーにアップロードして、PHP側の準備は完了。

アップロードしたURLが仮に”https://lets-hack.tech/wp-content/php/mirror.php “だった場合、パラメータとして”?url=http://exemple.com”を付加してアクセスすると、そのurlにアクセスして、htmlをそのまま返します。

こんな感じ↓

https://lets-hack.tech/wp-content/php/mirror.php?url=https://yahoo.co.jp

phpのfile_get_contents関数を経由することによって、JavaScriptのクロスドメインの制約を回避して、自サイト内でスクレイピングを完結できる構造になるワケです。

JQueryでajaxでデータを取得

var target = $('#target').val()
$.ajax({
    url: `/wp-content/php/mirror.php?url=${target}`,
    type: 'GET',
    dataType: 'html',
    cache: false
  }).done(function(data) {
    console.log("ok");
    $('#result').html($(data).find('h2').text());
  }).fail(function(XMLHttpRequest, textStatus, errorThrown) {
    console.log("error");
  })

ワードプレスサイトの任意の位置に先ほどの[mirror.php]をアップロード。

そこにアクセスして帰ってきた[data]をJQueryでいじっていきます。

上記例ではtargetという変数にスクレイピングしたいURLを格納して使うことになります。

実際にJQueryによるスクレイピングの形を作ってみる

任意のURLを入力すると、そのサイトのH1タグを取得します。

フロントエンド側の実際のソースコード

<div class="search-box">
<input id="target" class="target" type="text" placeholder="任意のURLを入力" value="" name="kw">
<button class="btn-search">
  <img src="https://lets-hack.tech/wp-content/themes/keni80_wp_standard_all/images/icon/search_black.svg" width="18" height="18">
  <noscript>
    <img src="https://lets-hack.tech/wp-content/themes/keni80_wp_standard_all/images/icon/search_black.svg" width="18" height="18">
  </noscript>
</button>
</div>
var main = function(){
var target = $('#target').val()
$('#result').html('<img class="loading" src="/wp-content/themes/keni8-child/images/loading.svg">')
$.ajax({
    url: `/wp-content/php/mirror.php?url=${target}`,
    type: 'GET',
    dataType: 'html',
    cache: false
  }).done(function(data) {
    console.log("ok");
    $('#result').html($(data).find('h1').text());
  }).fail(function(XMLHttpRequest, textStatus, errorThrown) {
    console.log("error");
  })
}

$('.btn-search').on('click',main);

$( '#target' ).keypress( function ( e ) {
  if ( e.which == 13 ) {
    console.log("key" + e.which);
    main();
    return false;
  };
});

ワードプレスで動かす場合はwindow.onloadやjQuery(function ($) {})などでのカプセル化が必要です。

ajax.done内の[data]変数のいじり方でどんな値でも取得することができます。

JQueryによるスクレイピング完成系

まとめ

JQueryはDOM操作で一番便利なのは普及度合いを見ても明らかです。

スクレイピングにJQueryを利用できるのは便利さアップです。

JavaScript
JQuery スクレイピング
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする コメントをキャンセル

email confirm*

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

シンプル美と機能性を両立させた、国内最高峰のWordPressテーマ『SWELL』
人気記事
  • IQテストいくつか受けてみました
    ネット上で信憑性がありそうなIQテスト、5種類まとめて受けた結果…
  • hayate
    メルカリの商品を世界最速で購入するためだけのアラートツール
  • 【Python】BeautifulSoupの使い方・基本メソッド一覧|スクレイピング
  • Pythonファイルのexe化
    【悲報】PyInstallerさん、300MBのexeファイルを吐き出すようになる
  • Amazon Echo アレクサのコマンドまとめ
    AmazonEchoの使い方とできる事、アレクサへの指示コマンド一覧
最近の投稿
  • 正規表現処理の濁点でハマった話2024-12-12
  • 保護中: 疾風v2更新履歴2024-05-31
  • 【自営・経営者向け・税金も】クレジットカードガチ勢による最強クレカ解説2023-10-23
  • PyQt5 QListWidget の item削除でtextBoxのフォーカスが奪われる2023-03-05
  • WordPressからのメールが届かない時の調査と解決法2023-02-27
目次
目次