メソッドの説明 (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::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コードから取得したリンクを処理します。エンティティ(& など)をデコードし、オプションで 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();
}
}
便利なリンク
🔗 ファイルをディスクに保存する例
ファイルをディスクに直接保存する方法を示す例
🔗 セッション操作の例
JavaScriptスクレイパーでのセッション機能の使用
🔗 セッションへのデータ保存の例
セッションに任意のデータを保存する機能のデモンストレーション
🔗 results.addElement() の使用
results.addElement() を使用してデータ配列を埋める例と、通常の .push() との違いのデモンストレーション