メインコンテンツへスキップ

結果の表示とフォーマット

利用可能な結果保存形式

A-Parserでの結果のフォーマットには、Template Toolkitテンプレートエンジンが採用されており、スクレイピング結果をさまざまな形式で簡単に保存できます。

  • テキストファイルへのリスト形式:1行に1つの結果、区切り文字の使用、任意のフォーマット
  • Excel、Google Docsなどへのインポートが可能なCSVファイル
  • XMLJSON、およびその他のデータ保存形式
  • ページを動的に生成するHTML形式
  • データベースへの直接インポート用のSQLダンプ形式、またはSQLiteデータベースへの直接書き込み
  • 画像(jpg, png, gif, ...)、ドキュメント(pdf, docx, ...)、実行ファイルやアーカイブ(exe, dmg, zip, ...)、およびその他のあらゆるデータ型を保存するためのバイナリ形式

結果フォーマットの編集

Result format (結果フォーマット) - テンプレートを使用して結果を必要な形式にフォーマットできます。クエリと結果の各組み合わせに適用されます。

結果のフォーマット
  • 全体の結果フォーマットは、Result formatフィールドで設定します
  • 各スクレイパーごとの結果フォーマットは、スクレイパー設定のResult formatで個別に設定できます

A-Parserは1つのタスクで複数のスクレイパーの使用をサポートしています。全体の結果フォーマットでは、どのスクレイパーの結果を出力するかを指定する必要があります:

  • $p1 - 1番目のスクレイパー(スクリーンショットでは SE::GoogleSE::Google)の結果、$p2 - 2番目のスクレイパー(スクリーンショットでは SE::BingSE::Bing)の結果
  • スクレイパーの順序番号は、スクレイパー選択フィールドの左側に表示されます
  • $p1.preset および $p2.preset は、対応するスクレイパーの設定から結果フォーマットの値を取得することを意味します
  • この例では、$p1.preset$p1.serp.format('$link\n') に置き換えることができ、同じ効果が得られます。この場合、設定からの結果フォーマットは使用されなくなります。

Result format (結果フォーマット)は、編集フィールドの対応するアイコンをクリックして、便利なマルチラインエディタで指定できます:

結果フォーマットの編集フィールド

全体の結果フォーマットでは、以下の変数が利用可能です:

  • $query - フォーマット後のクエリ
  • $query.* - クエリに関連するすべての変数。クエリテンプレートの記事で説明されています
  • $p1, $p2, ... - 各スクレイパーごとのスクレイピング結果にアクセスするための変数(各スクレイパーの可能な結果の表示
  • $p1.query, $p2.query, ... - 各スクレイパーの設定で指定されたクエリフォーマットを考慮したフォーマット後のクエリ

開始テキストと終了テキスト

各結果ファイルに対して、個別の開始/終了テキストを指定できます:

  • CSVファイルのヘッダー作成用
  • XMLファイルの開始タグと終了タグ用
  • HTMLファイルのヘッダー、見出し、フッター用
  • その他あらゆる用途

この機能を有効にするには、タスクエディタの下部にあるMore options (詳細オプション)ボタンをクリックする必要があります。

開始および終了テキスト用のフィールド

開始テキストと終了テキストでは、Template Toolkitテンプレートエンジンの使用がサポートされています。利用可能な変数:

  • $query - フォーマット後のクエリ
  • $query.* - クエリに関連するすべての変数。クエリテンプレートの記事で説明されています
注記

重要!これらの変数は、各クエリを個別のファイルに保存する場合、または結果ファイル名フォーマットで同じ変数を使用する場合にのみ利用可能です。

結果ファイル名フォーマット

A-Parserでは、結果ファイル名にもテンプレートを使用できます。これにより、現在の日付、クエリの順序番号、クエリ自体、またはその他の任意のフォーマットに基づいて、ファイルやフォルダを自動的に作成できます。

ファイル名フィールド

File name (ファイル名)フィールドでは、以下の変数がサポートされています:

  • 全体の結果フォーマットで利用可能なすべての変数
  • $queriesfile - クエリファイルのパスと名前。フォーム経由でクエリを指定した場合は queries_from_text.txt になります
  • $datefile - Template Toolkitのdateプラグインオブジェクト。日付フォーマット %b-%d_%H-%M-%S に設定されており、フォーマットすると現在の時刻と日付を May-08_20-08-38 の形式で出力します。フォーマットは詳細設定で変更可能です

デフォルトでは、ファイル名はタスク開始時の日付と時刻に基づいて作成されます。

複雑な例

reports/$queriesfile/${query}.txt
  • reportsフォルダが作成されます
  • クエリファイル名のサブフォルダが作成されます
  • サブフォルダ内には、タスクで使用されるクエリの数だけファイルが作成されます。ファイル名にはクエリ自体が使用され、拡張子は .txt になります
ヒント

変数 $query は、拡張子 .txt が変数の一部として解釈されるのを防ぐために ${query} という形式で記述されています。詳細はTemplate Toolkitテンプレートエンジンのドキュメントを参照してください。

⏩ 動画:結果ファイルの名前付け

この動画では、結果ファイルの名前付けの例をいくつか紹介します:

  1. クエリに応じた結果ファイルの番号付け。
  2. 結果ファイルの番号付け + クエリ名の一部。
  3. クエリがリンクの場合の、クエリによる結果ファイルの名前付け。

利用可能な結果の表示

各スクレイパーには独自の結果セットがあります。利用可能な結果のリストを表示するには、スクレイパーにカーソルを合わせます。ポップアップヒントに、単純な結果と配列のリスト、およびネストされた要素のリストが表示されます。

ポップアップヒント内の利用可能な結果リスト黄色で示されているのは、すべてのスクレイパーに共通の結果です:
  • $query - フォーマット後にスクレイパーに渡されたクエリ
  • $query.orig - オリジナルのクエリ(ファイル内またはクエリ入力フィールドにあるそのままの状態)
  • $query.first - ネストされたスクレイピングオプション(Parse all results または Parse to level)を使用した場合の最初のクエリ
  • $info.success - このクエリのスクレイピングが成功したかどうかの情報
  • $info.retries - このクエリに使用されたリトライ回数
  • $info.stats - このクエリに対するスクレイパーの動作統計
  • $pages.$i.data - 追加情報を独自に抽出するための、サーバーからの未処理のレスポンス配列
緑色は、スクレイパー SE::BingSE::Bing でのみ利用可能な結果を示しています:
  • $totalcount - 検索結果の数
  • $ads(要素:$link, $anchor, $visiblelink, $snippet, $position, $page) - 広告リストの配列
  • $related.$i.key - 関連キーワードリストの配列
  • $serp(要素:$link, $anchor, $snippet, $cache) - 検索エンジンのメイン結果の配列
注記

配列の場合、変数が $i で明示的に指定されていることに注意してください。これは要素が複数あることを意味し、インデックス(位置番号)でアクセスしたり、ループで各要素を処理したりできます。

ヒント

結果 $pages.$i.data は、1つのクエリ内で「ページを遷移」しないスクレイパーの場合、自動的に $data に変更されます。例えば DeepL::TranslatorDeepL::Translator などが該当します。

結果の表現

A-Parserはあらゆる種類の情報をスクレイピングするために設計されており、そのために2つのタイプの結果が導入されました:

  • 単純な結果 (Flat)
  • 結果の配列 (Array)

スクレイパー SE::GoogleSE::Google を例に、各タイプを確認してみましょう。検索結果のスクリーンショットです:

Google検索結果のスクリーンショット

単純な結果

Simple results (単純な結果) - 1つのクエリに対して1つの結果が対応する場合。例:

  • クエリごとの結果数 ($totalcount)
  • クエリがスペルミスかどうか ($misspell、スクリーンショットには未掲載)

その他の例:

  • スクレイパー DeepL::TranslatorDeepL::Translator における翻訳テキスト($translated)の値
  • スクレイパー Rank::MajesticSEORank::MajesticSEO における参照ドメイン数($domains)、トラスト値($trustflow)、バックリンク数($backlinks)などの値

単一の結果は通常の変数(プレフィックス $ + 英字名)に保存されます。

結果の配列

結果の配列 - 1つのクエリに対して結果のリストが対応する場合。リストの各要素には、さらに複数のネストされた要素が含まれることがあります。Googleの検索結果を例に見てみましょう。これはスクレイパー内では配列 $serp として表現されます。わかりやすくするために表を使用し、最初の5つの結果を記録します:

リンク ($link)アンカー ($anchor)スニペット ($snippet)
http://www.speedtest.net/Speedtest.net by Ookla - The Global Broadband Speed TestTest your Internet connection bandwidth to locations around the world with this interactive broadband speed test from Ookla.
http://en.wikipedia.org/wiki/Test_cricketTest cricket - Wikipedia, the free encyclopediaTest cricket is the longest form of the sport of cricket. Test matches are played between national representative teams with "Test status", as determined by the ...
http://www.speakeasy.net/speedtest/Speakeasy Speed TestSaturday 03-May 2014, 11:04:29 AM Your IP: The Speakeasy Speed Test requires Flash v7 or higher. Please update your browser. See Pricing Or Call Today
http://www.humanmetrics.com/cgi-win/jtypes2.aspPersonality test based on C. Jung and I. Briggs Myers type theoryHumanmetrics Jung Typology Test™ instrument uses methodology, questionnaire, scoring and software that are proprietary to Humanmetrics, and shall not be ...
http://test-ipv6.com/Test your IPv6.This will test your browser and connection for IPv6 readiness, as well as show you your current IPV4 and IPv6 address. ... Test your IPv6 connectivity. JavaScript ...

各検索順位は、3つのネストされた要素(リンク $link、アンカー $anchor、スニペット $snippet)を持つ配列に記録されます。

別の例として、配列 $related に保存される関連キーワードのリストを挙げます:

キーワード ($key)
test wwe
depression test
test my speed
wonderlic test
test personality
act test
jiggle test
bipolar test

この配列には、ネストされた要素がキーワード($key)の1つだけであることがわかります。

配列要素の番号付けは0から始まります。個別の配列要素へのアクセス例:

  • $serp.0.link - 検索結果の最初のリンク
  • $serp.3.anchor - 検索結果の4番目のアンカー
  • $related.0.key - 最初の関連キーワード

単純な結果と配列のフォーマットについての詳細は後述します。

フォーマットの原則

スクレイパーが単純な結果や配列にデータを収集した後、それらを必要な形式で表示(ファイルに保存)する必要があります。利便性と機能性のために、A-Parserではテンプレートエンジン Template Toolkit を使用しています。よく使われる構文を理解するために、テンプレートテスト ツールを使用してみましょう。スクレイパー SE::GoogleSE::Google のプロジェクトを選択します:

テンプレートのテスト

スクリーンショットには3つのフィールドが表示されています:

  • JSON - スクレイパー内部でのデータの表現
  • Template - 結果のフォーマットが行われるテンプレート
  • Result - 指定されたテンプレートに従って直接変換されたデータ。この形式で結果がファイルに書き込まれます。

テンプレートを変更することで、結果の見た目を変えることができます。次のテンプレートを見てみましょう:

例

Template (テンプレート)フィールドのテキスト:

クエリレポート: $query    
競合数: $totalcount
リンク、アンカー、スニペットのリスト:
$serp.format('$link $anchor\n$snippet\n\n')

主なルール:

  • 通常のテキストはそのまま結果に出力されます。
  • 単純な結果を出力するには、必要な場所にプレフィックス $ を付けた変数を出力します。
  • 配列のフォーマットには .format メソッドを使用します。これについては後述します。
  • \n は改行を表します。

配列のフォーマット

次の構造を分解してみましょう:

$serp.format('$link $anchor\n$snippet\n\n')

この記述は、配列 $serp に対してパラメータ '$link $anchor\n$snippet\n\n' を指定して .format メソッドを呼び出すことを意味します。.format メソッドは、パラメータで指定されたテンプレートに従って配列のすべての要素を文字列に結合します。テンプレートの意味は次の通りです:配列 $serp の各要素について、リンクとアンカーをスペース区切りで出力し、次の行にスニペットを出力し、その後さらに2つの改行を入れて結果の間に空行を作ります。

テンプレートエンジンの使用

変数の出力

テンプレートエンジンを使用するには、タグ [% %] を挿入し、その中に実行したいロジックを入力します。

テンプレートエンジンを使用したCMS出力テンプレートエンジンを使用したCMS出力の結果

配列の反復処理

配列の要素を出力するには、FOREACH 構造を使用します:

[% FOREACH i IN p1.list;    
i.cms _ "\n";
END %]
ヒント

テンプレートエンジンの詳細な情報と例については、A-Parserにおけるテンプレートの動作の特徴を参照してください。

競合数の出力

すべての検索エンジンスクレイパー(SE::GoogleSE::GoogleSE::YandexSE::Yandex...)におけるクエリごとの競合(ヒット件数)の出力。

結果フォーマット:

$query: $totalcount\n

結果の例:

test: 3910000000
viagra: 278000000
窓 pvc: 3220000
...

検索エンジンの結果からリンクを出力します。

結果フォーマット:

$serp.format('$link\n')

結果の例:

http://www.speedtest.net/
http://www.speakeasy.net/speedtest/
http://en.wikipedia.org/wiki/Test_cricket
http://www.humanmetrics.com/cgi-win/jtypes2.asp
http://html5test.com/
http://test-ipv6.com/
...

サジェストのスクレイピング

検索エンジンのサジェストを出力します。

結果フォーマット:

$results.format('$suggest\n')

結果の例:

テストサーバー 戦車 オンライン
ロシア語 GIA テスト
パンケーキ生地 レシピ
精巣
ミルクを使ったピザ生地

クエリに関するデータの出力

Net::HTTPNet::HTTP およびそれをベースにしたスクレイパーでは、以下の出力も追加で利用可能です:
  • $proxy - クエリが実行されたプロキシ

  • $headers - レスポンスヘッダー

  • $code - レスポンスコード

  • $reason - レスポンスステータス

例

変数の値をJSONで出力

オブジェクト用の .json メソッド

クエリのすべてのリダイレクトを出力

このタスクには変数 $response が利用可能で、これを使用すると、以前のすべてのリダイレクトを含むクエリの任意の変数を取得できます。

結果フォーマット:

$response.Redirects.format('$URI\n--> ')$response.URI

スクレイパーの動作結果:

例

日付を記録するためにテンプレートエンジンを使用したJSON出力

この例では、スクレイパー Net::WhoisNet::Whois の結果を JSON 形式で出力する方法を示しています。

例

結果には、チェックしたドメイン、チェック時の日付、およびチェック結果が含まれます。結果フォーマットでわかるように、日付はTemplate Toolkitテンプレートエンジンを使用して取得しています。

結果フォーマット:

{    
"domain": "$query",
"date": "[% USE d = date(format = '%d.%m.20%y', locale = 'C');d.format() %]",
"expire": "$p1.expire_date",
},

結果の例:

[{
"domain": "a-parser.com",
"date": "05.05.2021",
"expire": "25.02.2022",
},
{}]
例をダウンロード

[A-Parserに例をインポートする方法]

eJxtVG1v2jAQ/ivWCUQrZaxM2pdM+0BRkTYx6ErRPgQ0efWFeXXszHYYVZT/3nMS
EtruQyTf23P33EtK8Nw9uluLDr2DOCkhr98QwxJ9HP/4baRj79jNkWe5QjaBCHJu
HdrgnZw5kUFgygvlYbeLgFDo6ebGZjyglVvNGNuCMBmXegsxvQd/C7RPW4hONu6x
sSRDtlnfMME+s6C8SGsYkkZDMR5m4w9Xw6dRxJR54FQUqWejy09i3LhdXLLhrkfF
Yy5tizvIJ+NG/tkkI6eKPugKXvMD3hsqOJUKe/WcpCXPkAyDEBmsXbqxP3py5UJI
L43mqmEdOtR3YqMl0aV4bcg3MJfo5tZkfa66HaeOJW17gCCKOvZ7EwNxypXDCByV
OucUKl5bpEfLvbGrPNRD+hKMniq1wAOq3q3Gvy6kEjTOaUpBX9rA/7us3mBUHb3z
VAe0/yzVALG3BYHUwvXqWx8kzMLsibj4RbSVzKQn2c1MocOuXJHyETHvWrYMLcuM
xS5LA9zmpvXNUQtyTPqJTfNWV1Y7eEXkxWBeKh+MTuV+RRSsFHjyLPQ93clKz0y4
gsBMF0rRYBze9Qsyde0ggtC18E3wrE4R2Lf3EoE3Rrmva9KF+7KSFvBjKDCjXp5n
bSFp69XmbnFugbOlqrMnJ/F9c3Ku3tLAkNZ3b2ixiFq16865+weU50cdlxWN64+7
bZwCdK2MgDrkaBYQT6pnHsF5pA==

キーワードによる Google ニュースへのサイト掲載確認

キーワードによるGoogleニュースへのサイト掲載確認の例

結果の形式:

[% linksToOneString = p1.serp.format('$link. ');
matches = linksToOneString.match('.+?(' _ p1.query.domain _ ').+?');

IF matches.0;
p1.query.orig _';yes' _ "\n";
ELSE;
p1.query.orig _';no' _ "\n";
END %]

結果の例:

グーグル スクレイパー|a-parser.com;no
グーグル スクレイパー|forbes.ru;yes
例をダウンロード

[A-Parserに例をインポートする方法]

eJylVVFv2jAQ/iuR1YpWo1EQ7UuqaaIMpk6stKV9AoRccqQeju3aCQVR/vvOTkjS
ruNlEoq4u+++O9+dz1uSUrM0txoMpIaE4y1R7j8JyagXhj+kjDl4Z173GeZLL5IJ
ZcLDX2EQ8Go8WNNEcSBNoqg2oC3PuOaOhggWNOMpaW5JulGA7HIFWrPIGlmEsqIx
zGUmEENWlGeIae3+DccwqkIS8WrIATRnYmkUumCQGn9wwCXmNfr7x0Psz3Wozg4m
omtQTkU8O4xXWq43GlLNwNQ8W0EQkN102iTYLKyr6UudUNu08fFEuNM+yKGAETqK
2PvqqZZvK+YvHO6kcWQxvtc4vZwIVMyfwSDqo6PvTCcN/8u3k4Y3sywvGeiNX8zB
DAnQ5lg+CTvzJmSCFuLM132viOQHqCi5pGYIbVxuwDTeufQGo95nQCE/4G6+T8Tx
lJTFGNEVPEgsxoK54dvXCKUbmtj6HUU0BWvdF+TUT9d28mgUsZRJQXleUTvKVZUf
BXvJx00i1maFbelrmaAqBUfgUt13Y0yOnEyQInO+d7kPCReUG2gSg6n2KSYSlZZU
Z2hgKWiaSj1UNh1Ub4kUHc4HsAJe+Tv6q4zxCK9dZ4FO14Xj55DhXxy78nT1UDiG
rxpzKFmcdDX8VXlFciBjPHj0hMfmLGEpyqbrrnBIAlQuAVRZshtbskRqKMMUzEV0
XEEKhJ35qmMdVaneHcMtKiMzPbfUeY2b+ztk3PSNFGe2IQZwKeUFIW8WJG1f9i75
IJPprmpyLQYq51IsWDwsruV+HDLxgGtzKLrSLj5bJpFxjk02cF8NW8cUTbVCdd6P
zl0XwlZyvyQxScnNz1F+cqUZ5nxhE0ywMfWoBeWccv54P6hbSDWgKEyy4Ly9cN/A
fs/zb8tpLnKN54S2E9rV//bTGz3L97o/lwneuf/iwvv2hBsAt55NO4VYYh9sN939
CUkvf0vssoO1oiKCKL8SO9ej4oEp36tt/ZkJtzucy9/mNgfZqlsI6rB9BofOPil/
AGn6WSM=

タイムスタンプ値を日付形式で出力する

スクレイパー Social::Instagram::TagSocial::Instagram::Tag のように、結果に通常の日付はなくタイムスタンプ値のみが含まれる場合があります。この値は テンプレートエンジン Template-Toolkit を使用して日付形式で表示できます。

タイムスタンプ値を日付形式で出力する例

結果の形式:

[% USE date;

query.orig _ ": total posts - " _ postscount _ "\nPosts:\n";

FOREACH i IN posts;
d = date.format(i.time, format => '%d.%m.20%y');
i.link _ " - " _ d _ ":\n";
i.text _ "\n";
END %]

結果の例:

sport: total posts - 96500663
Posts:
https://www.instagram.com/p/COfJHshAkeD/ - 05.05.2021:
Quelques exemples de notre nouvelle campagne de communication personnalisable avec le nom des clubs 😀

Vous préférez quel visuel : 1, 2, 3, 4, 5 ? 🤔

#clubnormand #tennis #padel #beachtennis #tenniscourt #padelcourt #beachtenniscourt #lnt #LigueNormandieTennis #🎾 #sport #normandie #normandietourisme
https://www.instagram.com/p/COfJG7olavg/ - 05.05.2021:
💥 Sau màn lật đổ “Bà già” thành công, Nửa xanh thành Milan chính thức vượt qua Nửa đỏ về số lần lên đỉnh nước Ý nhiều nhất lịch sử.
-----------------------------
➖ Website: https://webthethao247.com/
➖ https://g.page/webthethao247?share
#wtt247 #webthethao247 #thethao #sport #bongda #SerieA #InterMilan #Juventus #ACMilan
https://www.instagram.com/p/COfJG1Hg7ax/ - 05.05.2021:
Which Skill was better 1 or 2? 🤔👇
Follow @ftb4ll for more 💥
Follow @ftb4ll for more 💥
Follow @ftb4ll for more 💥
________________________________________
Leave a Like 👍🏽
Subscribe for more 🔔
Leave your thoughts in the Comments  💬
________________________________________
❌Ignore the Tags ❌
#football #soccer #fussball #futbol #fifa #championsleague #bundesliga #ucl #footballmemes #goal #transfer #sports #penalty #ultimateteam #pacybits #fut #ultras #laliga #freekick #referee #sport #calcio #messi #ronaldo #skills #premierleague #foul #footballseason
https://www.instagram.com/p/COfIlXqhfAa/ - 05.05.2021:
Be Fuckin’ Ready 🤣🤣🤣

Get ready to fly!!!! 🏐🏐🏐🏐

Follow - @crackonkings

#beachball #nalin&kane #trance #music #90s #onyerhead #festival #party #afterparty #love #summer #uk #happy #sesh #crackon #football #sport #festivaloutfit #festivalfashion #sun #dj #dancing #club #festivalgirl #house #techno #rave
...
例をダウンロード

[A-Parserに例をインポートする方法]

eJx1VNtuGjEQ/RXLCkoj0VVSqS9bpRKhoFJRNuXyxKLKxQa58dqO7aVBiH/vjPeW
pM0+7RzPzDlzsU80MP/g753wIniark/Uxn+a0oXZSqbSdKJ9YHvHijRdsj15T5ay
EAAVlgRDOAuCiCewlKB9apnzwmGm9RsJwImLHStVoP0TDUcrgMschHOSYwbJwd4Z
V7AASqIbPTBVotu6R1aLUeT8lOtcP5bCHRPj5J78JDlNQVBgiljjgwehOQU4GltT
6hB98lzfI5LCT05jlnE2Hw2GX4kkk1nljnDg5DYyJZWYdzIJUHifVCa5/Uwuezzp
FcmH697x8gpiCHwyUVI/RKpGAa/ENYSVVxBPraAIj2ZfSG9Dz5tNn1aF+3Fkgrov
7E1Sz6U9XLCDWBrslYydb2LAmrECu3WB6vG0qeAqCU+YgXEugzSaqYoBx9WxrrR8
jN3WBnyxxVL4sTMFQKi6Bo+NujW9iDaFFGWM/VHF0HTHlBd96kHqmIEQ/vpEBuFY
MC6zqAfwEzV6oNRUHITq3GL+u1IqDrs12EHQpA78v0v2T45zW95zKti6Pw40tFmi
dZd976K4mZo9VM5/Qd1KFjKA7Ye4T4BeA/gghG17NsOeFcaJlqbOXLPDTbNC44p3
IxvYDnpRxouxvAS3Ru/kPquvTeNZ6iVc50wPDV5HrEuXSsFYvJh36zHw9RjQ6AS+
Dh5GCiy9ua40GKP8t0Ul1ToJ6/cRBRbQyeesdcotU2o1nz4/wUAfjM30yLlX44uL
Qb01Drm2sLx7A2sFpZ037cvSPlWnt96X9HSGuf3291UAFonugEG3PAyFpjfnvwdy
t1Y=

その他の例

[よく使われるテンプレートの例]