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

メソッドの説明 (v1)

警告

このJavaScript APIは非推奨です。API バージョン 2 の使用を推奨します。

一部のメソッドでは yield キーワードの指定が必要であることに注意してください。

yield this.request()

yield this.request(method, url, queryParams, opts)

リクエストによるHTTPレスポンスの取得。引数として以下を指定します:

  • method - リクエストメソッド (GET, POST...)
  • url - リクエスト用リンク
  • queryParams - GETパラメータのハッシュ、またはPOSTリクエストボディのハッシュ
  • opts - リクエストオプションのハッシュ

POSTメソッドを使用する場合、リクエストボディは2つの方法で渡すことができます:

  • queryParams 内に変数の名前と値を列挙する。例:
{
key: set.query,
id: 1234,
type: 'text'
}
  • opts 内の body 変数を介する。例:
body: 'key=' + set.query + '&id=1234&type=text'

opts.check_content

check_content: [ 条件1, 条件2, ...] - 取得したコンテンツをチェックするための条件の配列。チェックに合格しない場合、リクエストは別のプロキシで再試行されます。

機能:

  • 条件として文字列を使用(部分一致検索)
  • 条件として正規表現を使用
  • レスポンスのデータとヘッダーが渡される独自のチェック関数の使用
  • 複数の異なるタイプの条件を一度に設定可能
  • 論理否定の場合は条件を配列に入れます。例:check_content: ['xxxx', [/yyyy/]] は、取得データに文字列 xxxx が含まれ、かつ正規表現 /yyyy/ がページ内で一致しない場合にリクエストが成功したとみなされることを意味します。

リクエストが成功するためには、配列に指定されたすべてのチェックに合格する必要があります。

例(コメントにはリクエストが成功するために必要な条件が記載されています):

let response = yield this.request('GET', set.query, {}, {
check_content: [
/<\/html>|<\/body>/, //取得したページでこの正規表現が一致する必要がある
['XXXX'], //取得したページにこの部分文字列が含まれていてはならない
'</html>', //取得したページにこの部分文字列が含まれている必要がある
(data, hdr) => {
return hdr.Status == 200 && data.length > 100;
} //この関数がtrueを返す必要がある
]
});

opts.decode

decode: 'auto-html' - 文字コードの自動判別と utf8 への変換

指定可能な値:

  • auto-html - ヘッダー、metaタグ、およびページの内容に基づいて判別(推奨される最適なオプション)
  • utf8 - ドキュメントがutf8エンコーディングであることを指定
  • <encoding> - その他の任意のエンコーディング

opts.headers

headers: { ... } - ヘッダーのハッシュ。ヘッダー名は小文字で指定しますcookie なども指定可能です。 例:

headers: {
accept: 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
'accept-encoding': 'gzip, deflate, br',
cookie: 'a=321; b=test',
'user-agent' 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
}

opts.headers_order

headers_order: ['cookie', 'user-agent', ...] - ヘッダーのソート順序を再定義できます。

opts.recurse

recurse: N - リダイレクトの最大回数。デフォルトは7です。リダイレクトを無効にするには0を使用してください。

opts.proxyretries

proxyretries: N - リクエストの試行回数。デフォルトはスクレイパーの設定から取得されます。

opts.parsecodes

parsecodes: { ... } - スクレイパーが成功とみなすHTTPレスポンスコードのリスト。デフォルトはスクレイパーの設定から取得されます。'*': 1 を指定すると、すべてのレスポンスが成功とみなされます。 例:

parsecodes: {
200: 1,
403: 1,
500: 1
}

opts.timeout

timeout: N - レスポンスのタイムアウト(秒)。デフォルトはスクレイパーの設定から取得されます。

opts.do_gzip

do_gzip: 1 - 圧縮(gzip/deflate/br)を使用するかどうかを決定します。デフォルトは有効(1)です。無効にするには 0 を設定します。

opts.max_size

max_size: N - レスポンスの最大サイズ(バイト)。デフォルトはスクレイパーの設定から取得されます。

opts.cookie_jar

cookie_jar: { ... } - クッキーのハッシュ。

opts.attempt

attempt: N - 現在の試行回数を示します。このパラメータを使用すると、このリクエストに対する組み込みの試行ハンドラーは無視されます。

opts.browser

browser: 1 - ブラウザヘッダーの自動エミュレーション(1 - 有効、0 - 無効)

opts.use_proxy

use_proxy: 1 - JSスクレイパー内の個別のリクエストに対して、グローバルパラメータ Use proxy を上書きしてプロキシの使用を再定義します(1 - 有効、0 - 無効)。

opts.noextraquery

noextraquery: 0 - リクエストURLへの Extra query string の追加を無効にします(1 - 有効、0 - 無効)。

opts.save_to_file

save_to_file: file - メモリへの書き込みを介さず、ファイルを直接ディスクにダウンロードできます。file にはファイルを保存する名前とパスを指定します。このオプションを使用すると、data に関連するすべて(check_content でのコンテンツチェック、response.data が空になるなど)が無視されます。

opts.data_as_buffer

data_as_buffer: 0 - data を文字列 String (0) として返すか、オブジェクト Buffer (1) として返すかを決定します。デフォルトでは文字列 String が返されます。

opts.bypass_cloudflare

bypass_cloudflare: 0 - Chromeブラウザを使用してCloudFlareのJavaScript保護を自動的にバイパスします(1 - 有効、0 - 無効)。

opts.follow_meta_refresh

follow_meta_refresh: 0 - HTMLメタタグで宣言されたリダイレクトを追跡できるようにします:

<meta http-equiv="refresh" content="time; url=..." />

opts.tlsOpts

tlsOpts: { ... } – https接続用の 設定 を渡すことができます。 ​

yield this.parser.request()

yield this.parser.request(parser, preset, overrideParams, query)

他のスクレイパー(組み込みまたは別のJSスクレイパー)から結果を取得します。引数として以下を指定します:

  • parser - スクレイパー名 (SE::Google, JS::Custom::Example)
  • preset - 呼び出されるスクレイパーの設定プリセット
  • overrideParams - 呼び出されるスクレイパーの設定を上書きするハッシュ
  • query - クエリ

overrideParams では、呼び出されるスクレイパーのパラメータを上書きできます。また、以下のフラグも利用可能です:

overrideParams.resultArraysWithObjects

resultArraysWithObjects: 0 - 呼び出されるスクレイパーの結果配列をどのような形式で返すかを決定します:

  • 有効 (1) の場合 - オブジェクトの配列が返されます
    [{link: 'link1', anchor: 'anchor1'}, {link: 'link2', anchor: 'anchor2'}, ...]
  • 無効 (0) の場合 - 標準的な値の配列が返されます
    ['link1', 'anchor1', 'link2', 'anchor2', ...]

overrideParams.needData

needData: 1 - レスポンスに data/pages[] を含めるか (1) 含めないか (0) を決定します。最適化に使用できます。

tools.*

グローバルオブジェクト tools は、A-Parserの組み込み関数へのアクセスを可能にします(テンプレートエンジンのツール $tools.* と同様です)。

注記

tools.query は利用できません。this.query を使用する必要があります。

this.doLog()

ジョブのログ記録が有効かどうかを示します。ログが記録されていない場合に this.logger.put の引数に複雑な式を渡す際の最適化フラグとして使用できます。

this.logger.*

.put()

this.logger.put(message) - ジョブのログに文字列 message を追加します。

.putHTML()

this.logger.putHTML(code) - ジョブのログにHTMLコードを出力します。これはtextareaに表示されます。

yield this.sleep()

yield this.sleep(sec)

スレッドを sec 秒間停止させます。小数の指定も可能です。

yield this.mutex.*

スレッド間の同期のためのミューテックス。1つのスレッドに対してコードセクションをロックできます。

.lock()

ロックを待機します。ロックを取得した最初のスレッドが実行を継続し、他のスレッドはロックの解放を待ちます。

.unlock()

ロックを解放します。次のスレッドがロックを待機していた場合(.lock())、実行を継続します。

this.cookies.*

現在のリクエストのクッキー操作

.getAll()

クッキーの配列を取得

.setAll()

クッキーを設定。引数としてクッキーの配列を渡す必要があります。

.set()

this.cookies.set(host, path, name, value) - 単一のクッキーを設定

this.query.add()

this.query.add(query, maxLvl)

新しいクエリ (query) を追加します。オプションで最大レベル (maxLvl) を指定できます。tools.query.add() と同様です。 クエリ (query) としてパラメータのハッシュを渡すこともでき、クエリビルダー と同様に動作します。

例:

this.query.add({
query: "http://site.com",
param1: "..",
...
});

this.proxy.*

プロキシ操作

.next()

プロキシを次に変更します。古いプロキシは現在のリクエストでは二度と使用されません。

.ban()

プロキシを変更してBANします(サービスがIPベースでブロックする場合に使用する必要があります)。プロキシはスクレイパーの設定(proxybannedcleanup)で指定された時間BANされます。

.get()

現在のプロキシ(最後にリクエストが行われたプロキシ)を取得します。

.set()

this.proxy.set('http://127.0.0.1:8080', noChange = false) - 次のリクエストのプロキシを設定します。noChangeパラメータはオプションで、trueを指定すると試行間でプロキシが変更されなくなります。

yield this.captcha.*

キャプチャ操作

.recognize()

yield this.captcha.recognize(preset, image, type, overrides) - 認識のためにキャプチャをアップロードします

  • image - 認識する画像のバイナリデータ
  • preset - Util::AntiGateUtil::AntiGate のプリセットを指定します
  • type は 'jpeg', 'gif', 'png' のいずれかを指定します

結果は以下のフィールドを持つハッシュになります:

  • answer - 画像からのテキスト
  • id - キャプチャのID。後で reportBad を通じてエラーを報告するために使用できます
  • error - answer が設定されていない場合のテキストエラー

.recognizeFromUrl()

yield this.captcha.recognizeFromUrl(preset, url, overrides) - 前述のメソッドと同様ですが、リンク (url) からプロキシを使用せずに自動的にキャプチャをロードします。

.reportBad()

yield this.captcha.reportBad(preset, id, overrides) - キャプチャの回答が間違っていたことをサービスに報告します。

this.utils.*

.updateResultsData()

this.utils.updateResultsData(results, data) - $pages.$i.data および $data を自動的に埋めるためのメソッド。結果ページのコンテンツを追加するために呼び出す必要があります。

.urlFromHTML()

this.utils.urlFromHTML(url, base) - HTMLコードから取得したリンクを処理します。エンティティ(&amp; など)をデコードし、オプションで base(ベースURL、例えば元のページのURL)を渡すことで、完全なリンクを取得できます。

.url.extractDomain()

this.utils.url.extractDomain(url, removeDefaultSubdomain) - 第1引数としてリンクを受け取り、そのリンクからドメインを返します。第2引数(オプション)は、ドメインからサブドメイン www を削除するかどうかを決定します。デフォルトは 0(削除しない)です。

.url.extractTopDomain()

this.utils.url.extractTopDomain(url) - 第1引数としてリンクを受け取り、そのリンクからサブドメインなしのドメインを返します。

.url.extractTopDomainByZone()

this.utils.url.extractTopDomainByZone(url) - 第1引数としてリンクを受け取り、そのリンクからサブドメインなしのドメインを返します。すべての地域ゾーンに対応しています。

.url.extractMaxPath()

this.utils.url.extractMaxPath(url) - 文字列を受け取り、その中からURLを抽出します。

.url.extractWOParams()

this.utils.url.extractWOParams(url)- リンクを受け取り、パラメータ文字列を切り捨てた同じリンクを返します。つまり、? までのURLを返します。

.removeHtml()

this.utils.removeHtml(string) - 文字列を受け取り、HTMLタグを除去したものを返します。 this.utils.removeNoDigit(string) - 文字列を受け取り、数字以外をすべて削除して結果を返します。

.removeNoDigit()

this.utils.removeNoDigit(string) - 文字列を受け取り、数字以外をすべて削除して結果を返すメソッドです

.removeComma()

this.utils.removeComma(string) - 文字列を受け取り、.,\r\n などの文字を削除して結果を返すメソッドです

this.sessionManager.*

JSスクレイパーでセッションを使用するには、まずセッションマネージャーを初期化する必要があります。これは init() 関数を使用して行います

init() {
this.sessionManager.init({
//ここで追加のパラメータを設定できます
});
}

this.sessionManager.init() では、以下のパラメータを使用できます:

  • name - オプション。セッションが属するスクレイパー名を再定義できます。デフォルトは初期化が行われるスクレイパーの名前です
  • canChangeProxy - オプション。プロキシを変更できるかどうか。デフォルトは 1 です
  • domain - オプション。このスクレイパーに保存されているすべてのセッションから検索するか(値が指定されていない場合)、特定のドメインのみを検索するかを指定します(ドメインの前にドットを付けて指定する必要があります。例:.site.com

セッションを操作するための関数がいくつかあります:

.get()

this.sessionManager.get() - 新しいセッションを取得します。リクエストを実行する前に呼び出す必要があります

.reset()

this.sessionManager.reset() - クッキーをクリアして新しいセッションを取得します。現在のセッションでリクエストが成功しなかった場合に呼び出す必要があります。

.save()

this.sessionManager.save() - 成功したセッションの保存、またはセッションへの任意のデータの保存を行います

results.<array>.addElement()

results.<array>.addElement() メソッドを使用すると、results 内の配列をより便利に埋めることができます。これを使用すると、配列内の変数の順序を覚えて手動で列挙する必要がなくなります。

results.serp.addElement({
link: 'https://google.com',
anchor: 'Google',
snippet: 'Loreps ipsum...',
});

init() および destroy() メソッド

init() メソッドはタスクの開始時に呼び出され、destroy() は終了時に呼び出されます。

使用例:

const puppeteer = require("puppeteer");
let globalBrowser;

class Parser {
constructor() {
...
}

async init() {
globalBrowser = await puppeteer.launch();
};

async destroy() {
if(globalBrowser)
await globalBrowser.close();
}
}

便利なリンク