ここでは、PHP 収集に使用できる 2 つの優れたツールを紹介します。 1 つはスヌーピー、もう 1 つは simple_html_dom です。収集する方法は多数あります (実際には、本質的には 2 ~ 3 つだけで、残りは派生です)。PHP には、直接収集するために使用できるいくつかのメソッドが付属しています。でも、怠惰を最後まで貫く精神で。これら 2 つのツールを引き続き使用して、収集を容易にすることができます。
インターネット上にはスヌーピーの紹介がたくさんあります。以下は他の人が翻訳したスヌーピーのSDKです
//////////////////// //// ///////////////////////////////////
Snoopy はブラウザをシミュレートするために使用される PHP クラスですWebコンテンツの取得や送信フォームなどの機能が利用できます。
スヌーピーのいくつかの機能:
1 Web ページのコンテンツを取得します。 fetch
2 Web ページのテキスト コンテンツを取得します (HTML タグを削除します) fetchtext
3 Web ページのリンクを取得し、fetchlinks fetchform から取得します
4 プロキシホストをサポート
5 基本的なユーザー名/パスワード検証をサポート
6 user_agent、リファラー (ソース)、Cookie およびヘッダーコンテンツ (ヘッダーファイル) の設定をサポート
7 ブラウザーのリダイレクトをサポートし、リダイレクトの深さを制御できます
8 Web ページ内のリンクを変換できます高品質の URL に展開します (デフォルト)
9 データを送信して戻り値を取得します
10 トラッキング HTML フレームワークをサポートします
11 リダイレクト時の Cookie の受け渡しをサポートします
PHP 4 以降が必要です PHP クラスであるため、これはありません。サーバーを拡張する必要があります。curl をサポートする場合の最良の選択は、
クラス メソッド:
fetch($URI)
————–
これは、Web ページのコンテンツを取得するために使用されるメソッドです。
$URI パラメータは、クロールされた Web ページの URL アドレスです。
取得した結果は $this->results に保存されます。
フレームをスクレイピングしている場合、スヌーピーは各フレームを追跡して配列に保存し、$this->results に保存します。
fetchtext($URI)
——————
このメソッドは fetch() に似ていますが、唯一の違いは、このメソッドが HTML タグやその他の無関係なデータを削除し、Web ページ内のテキスト コンテンツのみを返すことです。
fetchform($URI)
——————
このメソッドは fetch() に似ていますが、唯一の違いは、このメソッドが HTML タグとその他の無関係なデータを削除し、フォームのコンテンツ (フォーム) のみを返すことです。ウェブページ。
fetchlinks($URI)
——————-
このメソッドは fetch() に似ていますが、唯一の違いは、このメソッドが HTML タグやその他の無関係なデータを削除し、Web ページ内のリンクのみを返すことです。
デフォルトでは、相対リンクは自動的に完成され、完全な URL に変換されます。
submit($URI,$formvars)
————————-
このメソッドは、$URL で指定されたリンク アドレスに確認フォームを送信します。 $formvars はフォームパラメータを格納する配列です。
submittext($URI,$formvars)
————————–
このメソッドは submit() に似ていますが、唯一の違いは、このメソッドが HTML タグとその他の無関係なデータを削除し、Web のみを返すことです。ログイン後のページ。
submitlinks($URI)
——————-
このメソッドは submit() と似ていますが、唯一の違いは、このメソッドが HTML タグやその他の無関係なデータを削除し、Web ページ内のリンクのみを返すことです。
デフォルトでは、相対リンクは自動的に完成され、完全な URL に変換されます。
クラス属性: (デフォルト値は括弧内にあります)
$host 接続するホスト
$port 接続するポート
$proxy_host 使用するプロキシ ホスト (存在する場合)
$proxy_port プロキシ ホスト使用するポート (存在する場合)
$agent ユーザー エージェント カモフラージュ (Snoopy v0.1)
$リファラー ソース情報 (存在する場合)
$cookies クッキー (存在する場合)
$rawheaders その他のヘッダー情報 (存在する場合)
$maxredirs リダイレクトの最大数, 0=許可されません (5)
$offsiteok オフサイトへのリダイレクトを許可するかどうか (true)
$expandlinks 完全なアドレスへのすべてのリンクを完了するかどうか (true)
$user 認証ユーザー名、ある場合は、
$pass 認証ユーザー名 (1 つの場合)
$accept http 受け入れタイプ (image/gif、image/x-xbitmap、image/jpeg、image/pjpeg、*/*)
$error エラーを報告する場所、次の場合任意
$response_code サーバーから返された応答コード
$headers サーバーから返されたヘッダー情報
$maxlength 返された最長のデータ長
$read_timeout 読み取り操作のタイムアウト (PHP 4 Beta 4+ が必要)
0 に設定 タイムアウトなし
$timed_out 読み取り操作がタイムアウトした場合、この属性は true を返します (PHP 4 Beta 4+ が必要)
$maxframes 追跡できる最大フレーム数
$status キャプチャされた http
$temp_dir のステータス Web サーバーは次のことができます。 write 一時ファイルディレクトリ (/tmp) を入力します
$curl_path cURL バイナリディレクトリがない場合は false に設定します
以下はデモです
".htmlspecialchars($snoopy->results)."\n";
array $e->getAllAttributes () |
array $e->attr
|
string $e->getAttribute ( $name ) |
string $e->attribute
|
void $e->setAttribute ( $name, $value ) |
void $value = $e->attribute
|
bool $e->hasAttribute ( $name ) |
bool isset($e->attribute ) |
void $e->removeAttribute ( $name ) |
void $e->attribute = null |
element $e->getElementById ( $id ) |
mixed $e->find ( "#$id", 0 ) |
mixed $e->getElementsById ( $id [,$index] ) |
mixed $e->find ( "#$id" [, int $index] ) |
element $e->getElementByTagName ($name ) |
混合 $e->find ( $name, 0 ) |
混合 $e->getElementsByTagName ( $name [, $index] ) |
混合 $e->find ( $name [, int $index] ) |
要素 $e->parentNode() |
要素 $e->親() |
混合 $e->childNodes ( [$index] ) |
混合 $e->子供たち ( [int $index] ) |
要素 $e->firstChild () |
要素 $e->first_child () |
要素 $e->lastChild() |
要素 $e->last_child () |
要素 $e->次の兄弟 () |
要素 $e->next_sibling () |
要素 $e->前兄弟 () |
要素 $e->prev_sibling () |