Webスクレイピングによるデータ移行機能(HTMLImporterプラグイン)

HTMLImporterプラグインは、URLを指定してHTMLからデータを移行する機能を提供します。 本文推定機能により、HTMLからコンテンツ部分(ナビゲーションやヘッダ・フッタ部を除く)を自動抽出してデータを移行するため、移行元のサイトがどのCMSで運用されているかを問わずにデータ移行できます。 metaタグのデータのインポート、ページに含まれている画像やダウンロード対象のリンクファイルをあわせてインポートできます。 また、URL指定ではなく、ローカルにHTMLや画像ファイルなどをZIPアーカイブ化してアップロードしてインポートする機能も提供します。

利用にあたっては、DataMigratorプラグインが有効である必要があります。

設置とインストール

  • システムのプラグインの管理画面で、HTMLImporter と DataMigratorにチェックを入れて有効化します。

利用方法

  • HTMLインポートを行いたいスコープ(システムまたはスペース)の「ツール」メニューから「データ移行」を選択して画面遷移します。
  • インポート対象モデル※を選択し、「フォーマット」ドロップダウンから「HTML」を選択します。
  • オプション「ZIPファイル」「URL」のいずれかを選択します。
  • 「ZIPファイル」を選択した場合、ファイルをアップロード、「URL」を選択した場合はテキストエリアに1行1URL形式でURLのリストを入力して「送信する」をクリックします。
  • 取り込むポイントの指定などをしてから、「インポート開始」をクリックしてデータをインポートします。

Webスクレイピングによるデータ移行

※ 記事・ページのほか、モデルの設定画面で「インポート&エクスポート」が選択されているモデルが選択できます。インポート権限と、対象モデルに対する新規作成の権限が必要です。

取り込みの設定

  • Basic認証 : URLを指定してインポートする時、URLに対してBasic認証が設定されている時、IDとパスワードを入力します。
  • タイトル(モデルのプライマリカラム) : 「最初の見出し」「タイトル要素」「開始点と終了点を指定」「正規表現」「XPath」から選択します。
  • 最初の見出し : HTMLに最初に出現する見出しを取り込みます。
  • タイトル要素 : HTMLの title要素を取り込みます。この時、セパレータを指定できます。
  • タイトルが「PowerCMS X Ver. 1.020リリースノート | PowerCMS X」の時、セパレータに「 | 」を指定すると、「PowerCMS X Ver. 1.020リリースノート」がタイトルとなります。
  • 開始点と終了点を指定 : 取り込み開始点と終了点をカンマ区切りで指定します。
  • 「<h1>,</h1>」と指定すると、この間のテキストがタイトルとなります。
  • 正規表現 : 取り込みたい部分を正規表現で指定します。抽出する範囲を括弧 (( ... )) でキャプチャしてください。h1タグ内を指定するときは、以下のように指定します。

指定例

/<h1[^>]*>\s*(.*?)\s*<\/h1\s*>/

  • XPath : XPathを指定します。h1タグ内を指定するときは、以下のように指定します。

指定例

//*/h1

※ マッチしなかった場合は title要素が利用されます。

メタタグ(モデルによって表示される項目名は異なります)

  • 'description'を概要に : meta description を概要欄にインポートします。
  • 'keywords'をキーワードに : meta keywords をキーワード欄にインポートします。
  • 'keywords'をタグに : meta keywords のカンマ区切り文字列をタグとしてインポートします。
  • 'og:image'をアセットに : og:image をアセットとしてリレーション設定します。

本文(モデルによって表示される項目名は異なります)

「自動抽出」「開始点と終了点を指定」「正規表現」「XPath」から選択します。

  • 自動抽出 : 本文ブロックをHTMLから推定して取り込みを行います。
  • 開始点と終了点を指定 : 以下の例では class="page-body"指定のある div要素の中身を取り込みます。
指定例 : <div class="page-body">,</div>

  • 正規表現 : 取り込みたい部分を正規表現で指定します。抽出する範囲を括弧 (( ... )) でキャプチャしてください。
指定例 : /<div class="page-body">\s*(.*?)\s*<\/div>/s
  • XPath : XPathを指定します。以下の例では class="page-body"指定のある div要素の中身を取り込みます。
指定例 : //div[contains(@class, 'page-body')]

正規表現や開始点・終了点の指定と異なり、XPathを指定した場合は、該当する要素が複数存在する場合に以下の値をマージして取り込みます。

その他のカラム

  • 1行1設定を記載します。PowerCMS Xのカラム名=開始点,終了点のカンマ区切り、カラム名=正規表現※もしくはカラム名=XPathを指定します。
  • XPathを指定した場合は、該当する要素が複数存在する場合に以下の値をマージして取り込みます。
  • 正規表現とXPathを区別するために正規表現のデリミタには「!」を利用してください。
  • フィールドについては「field.フィールドのベースネーム」としてください。
指定例 : 

excerpt=<meta name="description"content=",">
keywords=!<meta name="keywords" content="(.*?)">!
published_on=//*[contains(@class, 'date')]
field.subtitle=//*[contains(@class, 'subtitle')]

※ 日付型のカラムについては書式の調整を自動的に試みます。

バイナリ型カラムへの値のインポート

meta property="og:image"要素、a要素または img要素をXPathで指定することで、リンク先のファイルのデータをバイナリ型のカラムに取り込むことができます。 ※ 環境変数 denied_exts に指定のある拡張子のファイルは取り込まれません。

指定例 : og_image=//meta[contains(@property, 'og:image')]

フォーマット

記事/ページ/ウィジェットなどの、リッチテキスト欄があり、text_formatカラムのあるモデルで選択できます。

その他

  • パスからカテゴリ/フォルダを作成 : 記事/ページで選択できます。ディレクトリのパスからカテゴリ/フォルダを作成し、インポートしたオブジェクトを関連付けます。
  • 同一URLのオブジェクトを上書き : 既にインポートした同一URLまたはパスのオブジェクトがあった場合、新規にオブジェクトを生成せず、既存のオブジェクトを上書きします。
  • HTMLをMinifyする : リッチテキスト欄やテキストエリア型のカラムへの値のインポート時にHTMLをMinify(コード圧縮)します。
  • アセットをインポート : モデルに「アセット」チェックのあるモデルで選択できます。インポートするテキスト中の img要素やその他の要素をアセットとして取り込み、オブジェクトと関連付けます。
  • この設定を記憶 : 「インポート開始」をクリックした時に設定をクッキーに保存します。
  • 画像以外にインポートするファイルの拡張子 : 「アセットをインポート」にチェックを入れた時、インポートするテキスト中に指定した拡張子のファイルへのリンク(a要素)が存在する時、アセットとして取り込み、オブジェクトと関連付けます※。

※ 環境変数 denied_exts に指定のある拡張子のファイルは取り込まれません。

プラグインによる処理の追加

該当のモデルに対する post_importコールバックに対応するプラグインを書くことで、インポート後のオブジェクトに対する後処理を追加できます。 第一引数 $cb からインポートタイプ、URLや HTMLソースなどを取得できます。

function post_import_entry ( $cb, $app, $obj, $original ) {
    $format = isset( $cb['format'] ) ? $cb['format'] : '';
    // html, movabletype, wordpress or noren.
    if ( $format != 'html' ) {
        return true;
    }
    $html = isset( $cb['data'] ) ? $cb['data'] : '';
    // Do something.
    return $obj->save();
}